diff --git a/api/api_v1/authz/authz.py b/api/api_v1/authz/authz.py index 9c1d700..af8b8d4 100644 --- a/api/api_v1/authz/authz.py +++ b/api/api_v1/authz/authz.py @@ -260,3 +260,64 @@ async def update_api_list( await crud.api_list.update_api(db, add_data) return schemas.Msg(code=0, msg='ok', data=1) + + +@router.get("/account_owner_list") +async def account_owner_list(request: Request, + game: str, + db: AsyncIOMotorDatabase = Depends(get_database), + current_user: schemas.UserDB = Depends(deps.get_current_user)) -> schemas.Msg: + """获取账号owner权限""" + account_infos = await crud.user.find_many(db, {}, + {'_id': False, 'name': True, 'nickname': True, + f'data_where.{game}': True}) + resp = [] + for account_info in account_infos: + resp.append( + { + 'name': account_info.get('name'), + 'nickname': account_info.get('nickname'), + 'owner_list': '' + } + ) + for item in account_info.get('data_where', {}).get(game, []): + if item.get('columnName') == 'owner_name': + resp[-1]['owner_list'] = ','.join(item.get('ftv', [])) + break + return schemas.Msg(code=0, msg='ok', data=resp) + + +@router.post("/update_account_owner") +async def account_owner_list(request: Request, + game: str, + data_in: schemas.OwnerList, + db: AsyncIOMotorDatabase = Depends(get_database), + current_user: schemas.UserDB = Depends(deps.get_current_user)) -> schemas.Msg: + """设置账号owner权限""" + set_data = { + "columnName": "owner_name", + "tableType": "event", + "comparator": "in", + "ftv": data_in.owners + } + is_exists = await crud.user.find_one(db, {'name': data_in.account_name, + f'data_where.{game}': {'$exists': True}, + }) + if is_exists: + if await crud.user.find_one(db, {'name': data_in.account_name, + f'data_where.{game}': {'$exists': True}, + f'data_where.{game}.columnName': 'owner_name' + }): + await crud.user.update_one(db, {'name': data_in.account_name, + f'data_where.{game}': {'$exists': True}, + f'data_where.{game}.columnName': 'owner_name' + }, {'$set': {f'data_where.{game}.$': set_data}}) + else: + await crud.user.update_one(db, {'name': data_in.account_name, + f'data_where.{game}': {'$exists': True}, + }, {'$push': {f'data_where.{game}': set_data}}) + else: + await crud.user.update_one(db, {'name': data_in.account_name, + }, {'$set': {f'data_where.{game}': [set_data]}}) + + return schemas.Msg(code=0, msg='ok') diff --git a/models/x_analysis.py b/models/x_analysis.py index 7d92d91..ee63c01 100644 --- a/models/x_analysis.py +++ b/models/x_analysis.py @@ -150,6 +150,8 @@ class XAnalysis: sa.Column('date') >= self.event_view['startTime'].split(' ')[0], sa.Column('date') <= self.event_view['endTime'].split(' ')[0] ] + if quota == '#distinct_id': + where.append(sa.Column('role_idx') == 1) qry = sa.select().where(*where) sql = str(qry.compile(compile_kwargs={"literal_binds": True})) where_str = sql.split('WHERE ')[1] @@ -164,6 +166,7 @@ class XAnalysis: where_account = self.handler_filts((self.account_filters, 'and'), self.ext_filters) where_account_str = 1 if where_account: + qry = sa.select().where(*where_account) sql = str(qry.compile(compile_kwargs={"literal_binds": True})) where_account_str = sql.split('WHERE ')[1] diff --git a/schemas/role.py b/schemas/role.py index 3f84e22..c6c0d3b 100644 --- a/schemas/role.py +++ b/schemas/role.py @@ -30,3 +30,8 @@ class EditRole(BaseModel): role_id: str = Field(..., description='要编辑的id') name: str = None desc: str = None + + +class OwnerList(BaseModel): + owners: list + account_name: str