1
This commit is contained in:
parent
19a2c3aa13
commit
04ce5ffd54
@ -18,7 +18,7 @@ router = APIRouter()
|
|||||||
@router.post("/add_role_domain")
|
@router.post("/add_role_domain")
|
||||||
async def add_role_domain(
|
async def add_role_domain(
|
||||||
request: Request,
|
request: Request,
|
||||||
data_in: schemas.AddRoleForUserInDomain,
|
data_in: schemas.AddRoleForUsersInDomain,
|
||||||
db: AsyncIOMotorDatabase = Depends(get_database),
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
||||||
current_user: schemas.UserDB = Depends(deps.get_current_user)):
|
current_user: schemas.UserDB = Depends(deps.get_current_user)):
|
||||||
"""
|
"""
|
||||||
@ -26,13 +26,14 @@ async def add_role_domain(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# username role dom
|
# username role dom
|
||||||
is_exists_role = await crud.role.check(db, _id=data_in.role_id, game=data_in.game)
|
for item in data_in.data:
|
||||||
|
is_exists_role = await crud.role.check(db, _id=item.role_id, game=item.game)
|
||||||
if not is_exists_role:
|
if not is_exists_role:
|
||||||
return schemas.Msg(code='-1', msg='角色不存在')
|
continue
|
||||||
casbin_enforcer.add_role_for_user_in_domain(user=data_in.username,
|
casbin_enforcer.add_role_for_user_in_domain(user=item.username,
|
||||||
role=data_in.role_id,
|
role=item.role_id,
|
||||||
domain=data_in.game)
|
domain=item.game)
|
||||||
return schemas.Msg(code='-1', msg='添加成功')
|
return schemas.Msg(code=0, msg='添加成功')
|
||||||
|
|
||||||
|
|
||||||
@router.post("/get_permissions_for_user_in_domain")
|
@router.post("/get_permissions_for_user_in_domain")
|
||||||
@ -72,7 +73,7 @@ async def del_role_domain(
|
|||||||
res = casbin_enforcer.delete_roles_for_user_in_domain(user=data_in.username,
|
res = casbin_enforcer.delete_roles_for_user_in_domain(user=data_in.username,
|
||||||
role=data_in.role_id,
|
role=data_in.role_id,
|
||||||
domain=data_in.game)
|
domain=data_in.game)
|
||||||
await crud.role.delete_id(db, data_in.role_id)
|
# await crud.role.delete_id(db, data_in.role_id)
|
||||||
return schemas.Msg(code=0, msg='ok', data=res)
|
return schemas.Msg(code=0, msg='ok', data=res)
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ from db import get_database
|
|||||||
from db.ckdb import CKDrive, get_ck_db
|
from db.ckdb import CKDrive, get_ck_db
|
||||||
from schemas.project import ProjectCreate
|
from schemas.project import ProjectCreate
|
||||||
# from utils import casbin_enforcer
|
# from utils import casbin_enforcer
|
||||||
|
from utils import casbin_enforcer
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@ -161,45 +162,42 @@ async def members(request: Request,
|
|||||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||||
):
|
):
|
||||||
"""查看项目成员"""
|
"""查看项目成员"""
|
||||||
roles = await crud.authority.find_many(db, {'ptype': 'g', 'v2': game})
|
data = casbin_enforcer.get_all_users_by_domain(game)
|
||||||
data = dict()
|
names = []
|
||||||
data_auth_ids = set()
|
role_ids = []
|
||||||
for item in roles:
|
for item in data:
|
||||||
data[item['v0']] = {'name': item['v0'],
|
names.append(item['username'])
|
||||||
'role': item['v1'],
|
role_ids.append(item['role_id'])
|
||||||
'data_auth_id': item.get('data_auth_id')
|
users = await crud.user.get_by_users(db, {'name': {'$in': names}})
|
||||||
}
|
roles = await crud.role.find_ids(db,role_ids)
|
||||||
if item.get('data_auth_id'):
|
users = {item.name: item.dict() for item in users.data}
|
||||||
data_auth_ids.add(ObjectId(item.get('data_auth_id')))
|
roles = {item['_id']: item['name'] for item in roles}
|
||||||
|
|
||||||
data_auth = {str(m['_id']): m['title'] async for m in
|
|
||||||
crud.data_auth.find(db, {'_id': {'$in': list(data_auth_ids)}}, {'title': 1})}
|
|
||||||
|
|
||||||
data['root'] = {'name': 'root', 'role': '超级管理员'}
|
|
||||||
users = await crud.user.get_by_users(db, name={'$in': list(data.keys())})
|
|
||||||
res = []
|
res = []
|
||||||
for user in users.data:
|
for item in data:
|
||||||
|
username = item['username']
|
||||||
|
role_id = item['role_id']
|
||||||
res.append({
|
res.append({
|
||||||
**user.dict(),
|
**users[username],
|
||||||
'role': data[user.name]['role'],
|
'role': roles[role_id],
|
||||||
'data_auth': data_auth.get(data[user.name].get('data_auth_id'), '全部事件')
|
'role_id': role_id,
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
return schemas.Msg(code=0, msg='ok', data=res)
|
return schemas.Msg(code=0, msg='ok', data=res)
|
||||||
|
|
||||||
|
|
||||||
@router.post("/del_member")
|
# @router.post("/del_member")
|
||||||
async def members(request: Request,
|
# async def members(request: Request,
|
||||||
game: str,
|
# game: str,
|
||||||
data_in: schemas.ProjectDelMember,
|
# data_in: schemas.ProjectDelMember,
|
||||||
db: AsyncIOMotorDatabase = Depends(get_database),
|
# db: AsyncIOMotorDatabase = Depends(get_database),
|
||||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
# current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||||
):
|
# ):
|
||||||
"""删除项目成员"""
|
# """删除项目成员"""
|
||||||
# casbin_enforcer.delete_roles_for_user_in_domain(data_in.username, data_in.role, game)
|
# # casbin_enforcer.delete_roles_for_user_in_domain(data_in.username, data_in.role, game)
|
||||||
await crud.project.del_members(db, data_in)
|
# await crud.project.del_members(db, data_in)
|
||||||
# await crud.authority.delete(db, ptype='g', v2=game, v0=data_in.username)
|
# # await crud.authority.delete(db, ptype='g', v2=game, v0=data_in.username)
|
||||||
return schemas.Msg(code=0, msg='ok')
|
# return schemas.Msg(code=0, msg='ok')
|
||||||
|
|
||||||
|
|
||||||
@router.post("/kanban")
|
@router.post("/kanban")
|
||||||
|
@ -127,3 +127,27 @@ async def all_account(page: int = 1, limit: int = 10, db: AsyncIOMotorDatabase =
|
|||||||
data = [schemas.UserDB(**user) async for user in cursor]
|
data = [schemas.UserDB(**user) async for user in cursor]
|
||||||
|
|
||||||
return schemas.Msg(code=0, msg='ok', data=data)
|
return schemas.Msg(code=0, msg='ok', data=data)
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/add_account")
|
||||||
|
async def all_account(
|
||||||
|
data_in: schemas.CreateAccount,
|
||||||
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
||||||
|
current_user: schemas.User = Depends(deps.get_current_user)
|
||||||
|
) -> schemas.Msg:
|
||||||
|
"""
|
||||||
|
创建新账号
|
||||||
|
"""
|
||||||
|
created = []
|
||||||
|
for name in data_in.account_list:
|
||||||
|
if is_exists := await crud.user.exists(db, {'name': name}):
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
new_account = schemas.UserCreate(name=name, password='123')
|
||||||
|
created.append(name)
|
||||||
|
await crud.user.create(db, new_account)
|
||||||
|
res = {
|
||||||
|
'created_account': created,
|
||||||
|
'password': '123'
|
||||||
|
}
|
||||||
|
return schemas.Msg(code=0, msg='ok', data=res)
|
||||||
|
@ -17,6 +17,9 @@ class CRUDBase:
|
|||||||
async def find_one(self, db, filter=None, *args, **kwargs):
|
async def find_one(self, db, filter=None, *args, **kwargs):
|
||||||
return (await db[self.coll_name].find_one(filter, *args, **kwargs)) or dict()
|
return (await db[self.coll_name].find_one(filter, *args, **kwargs)) or dict()
|
||||||
|
|
||||||
|
async def exists(self, db, filter=None, *args, **kwargs):
|
||||||
|
return bool(await db[self.coll_name].find_one(filter, *args, **kwargs)) or False
|
||||||
|
|
||||||
async def read_have(self, db, v: str, **kwargs):
|
async def read_have(self, db, v: str, **kwargs):
|
||||||
where = {'members': v}
|
where = {'members': v}
|
||||||
where.update(kwargs)
|
where.update(kwargs)
|
||||||
@ -52,7 +55,7 @@ class CRUDBase:
|
|||||||
async def distinct(self, db, key, filter=None):
|
async def distinct(self, db, key, filter=None):
|
||||||
return await db[self.coll_name].distinct(key, filter)
|
return await db[self.coll_name].distinct(key, filter)
|
||||||
|
|
||||||
async def find_ids(self, db, ids, *args, **kwargs):
|
async def find_ids(self, db, ids:list, *args, **kwargs):
|
||||||
return await self.find_many(db, {'_id': {'$in': ids}}, *args, **kwargs)
|
return await self.find_many(db, {'_id': {'$in': ids}}, *args, **kwargs)
|
||||||
|
|
||||||
# async def _create_index(self, db: AsyncIOMotorDatabase, *args, **kwargs):
|
# async def _create_index(self, db: AsyncIOMotorDatabase, *args, **kwargs):
|
||||||
|
@ -11,6 +11,8 @@ from schemas import UserCreate, UserDBRW
|
|||||||
|
|
||||||
__all__ = 'user',
|
__all__ = 'user',
|
||||||
|
|
||||||
|
from utils import get_uid
|
||||||
|
|
||||||
|
|
||||||
class CRUDUser(CRUDBase):
|
class CRUDUser(CRUDBase):
|
||||||
|
|
||||||
@ -18,11 +20,11 @@ class CRUDUser(CRUDBase):
|
|||||||
res = await db[self.coll_name].find_one({'name': name})
|
res = await db[self.coll_name].find_one({'name': name})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
async def edit_profile(self, db: AsyncIOMotorDatabase, data_id: schemas.UserProfileEdit,user_id):
|
async def edit_profile(self, db: AsyncIOMotorDatabase, data_id: schemas.UserProfileEdit, user_id):
|
||||||
if data_id.nickname:
|
if data_id.nickname:
|
||||||
await self.update_one(db, {'_id': user_id}, {'$set': {'nickname':data_id.nickname}})
|
await self.update_one(db, {'_id': user_id}, {'$set': {'nickname': data_id.nickname}})
|
||||||
if data_id.tel:
|
if data_id.tel:
|
||||||
await self.update_one(db, {'_id': user_id}, {'$set': {'tel':data_id.tel}})
|
await self.update_one(db, {'_id': user_id}, {'$set': {'tel': data_id.tel}})
|
||||||
|
|
||||||
async def update_login_time(self, db, name):
|
async def update_login_time(self, db, name):
|
||||||
await self.update_one(db, {'name': name},
|
await self.update_one(db, {'name': name},
|
||||||
@ -36,7 +38,7 @@ class CRUDUser(CRUDBase):
|
|||||||
name=obj_in.name,
|
name=obj_in.name,
|
||||||
is_superuser=obj_in.is_superuser,
|
is_superuser=obj_in.is_superuser,
|
||||||
nickname=obj_in.nickname,
|
nickname=obj_in.nickname,
|
||||||
_id=uuid.uuid1().hex
|
_id=get_uid()
|
||||||
)
|
)
|
||||||
return await db[self.coll_name].insert_one(db_obj.dict(by_alias=True))
|
return await db[self.coll_name].insert_one(db_obj.dict(by_alias=True))
|
||||||
|
|
||||||
@ -53,8 +55,8 @@ class CRUDUser(CRUDBase):
|
|||||||
return None
|
return None
|
||||||
return user_obj
|
return user_obj
|
||||||
|
|
||||||
async def get_by_users(self, db, **kwargs) -> schemas.Users:
|
async def get_by_users(self, db, *args, **kwargs) -> schemas.Users:
|
||||||
res = await self.find_many(db, **kwargs)
|
res = await self.find_many(db, *args, **kwargs)
|
||||||
return schemas.Users(data=res)
|
return schemas.Users(data=res)
|
||||||
|
|
||||||
async def get_all_user(self, db: AsyncIOMotorDatabase):
|
async def get_all_user(self, db: AsyncIOMotorDatabase):
|
||||||
|
@ -10,6 +10,10 @@ class AddRoleForUserInDomain(BaseModel):
|
|||||||
game: str
|
game: str
|
||||||
|
|
||||||
|
|
||||||
|
class AddRoleForUsersInDomain(BaseModel):
|
||||||
|
data: List[AddRoleForUserInDomain]
|
||||||
|
|
||||||
|
|
||||||
class GetPermissionsForUserInDomain(BaseModel):
|
class GetPermissionsForUserInDomain(BaseModel):
|
||||||
role_id: str
|
role_id: str
|
||||||
game: str
|
game: str
|
||||||
|
@ -27,6 +27,10 @@ class Users(BaseModel):
|
|||||||
data: List[User] = []
|
data: List[User] = []
|
||||||
|
|
||||||
|
|
||||||
|
class CreateAccount(BaseModel):
|
||||||
|
account_list: List[str] = []
|
||||||
|
|
||||||
|
|
||||||
class UserLogin(BaseModel):
|
class UserLogin(BaseModel):
|
||||||
username: str = ...
|
username: str = ...
|
||||||
password: str = ...
|
password: str = ...
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from utils.casbin.management_enforcer import ManagementEnforcer
|
from utils.casbin.management_enforcer import ManagementEnforcer
|
||||||
from utils.casbin.util import join_slice, set_subtract
|
from utils.casbin.util import join_slice, set_subtract
|
||||||
|
|
||||||
|
|
||||||
class Enforcer(ManagementEnforcer):
|
class Enforcer(ManagementEnforcer):
|
||||||
"""
|
"""
|
||||||
Enforcer = ManagementEnforcer + RBAC_API + RBAC_WITH_DOMAIN_API
|
Enforcer = ManagementEnforcer + RBAC_API + RBAC_WITH_DOMAIN_API
|
||||||
@ -209,3 +210,14 @@ class Enforcer(ManagementEnforcer):
|
|||||||
def get_permissions_for_user_in_domain(self, user, domain):
|
def get_permissions_for_user_in_domain(self, user, domain):
|
||||||
"""gets permissions for a user or role inside domain."""
|
"""gets permissions for a user or role inside domain."""
|
||||||
return self.get_filtered_policy(0, user, domain)
|
return self.get_filtered_policy(0, user, domain)
|
||||||
|
|
||||||
|
def get_all_users_by_domain(self, domain):
|
||||||
|
"""获得所有与该域相关联的用户"""
|
||||||
|
data = self.get_filtered_grouping_policy(2, domain)
|
||||||
|
res = []
|
||||||
|
for item in data:
|
||||||
|
res.append({
|
||||||
|
'username': item[0],
|
||||||
|
'role_id': item[1]
|
||||||
|
})
|
||||||
|
return res
|
||||||
|
Loading…
Reference in New Issue
Block a user