Commit f70f87e8 authored by 杨明橙's avatar 杨明橙

查询基金 添加权限验证

parent 8b853a65
...@@ -107,7 +107,7 @@ async def get( ...@@ -107,7 +107,7 @@ async def get(
permission_role_collect: AgnosticCollection = Depends(get_permission_role_collect) permission_role_collect: AgnosticCollection = Depends(get_permission_role_collect)
): ):
# 验证权限 # 验证权限
if not await check_permission('data_permission.fund.query_info', fund_id, user.email, permission_user_collect, if not await check_permission(['data_permission.fund.query_info'], fund_id, user.email, permission_user_collect,
permission_role_collect): permission_role_collect):
raise FundPermissionError() raise FundPermissionError()
...@@ -139,7 +139,7 @@ async def get( ...@@ -139,7 +139,7 @@ async def get(
for item in relation_funds: for item in relation_funds:
fund_id = item['fund_id'] fund_id = item['fund_id']
task = g.create_task( task = g.create_task(
check_permission('data_permission.fund.query_info', fund_id, user.email, permission_user_collect, check_permission(['data_permission.fund.query_info'], fund_id, user.email, permission_user_collect,
permission_role_collect)) permission_role_collect))
tasks[fund_id] = task tasks[fund_id] = task
auth_fund_list = [k for k, v in tasks.items() if v.result()] auth_fund_list = [k for k, v in tasks.items() if v.result()]
......
...@@ -4,6 +4,8 @@ from dependencies import get_current_user, get_permission_user_collect, get_perm ...@@ -4,6 +4,8 @@ from dependencies import get_current_user, get_permission_user_collect, get_perm
from exception.token import FundPermissionError from exception.token import FundPermissionError
from model import BaseResponse, Response from model import BaseResponse, Response
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends
from schema.permission import CreateUserInfo
from service.permission import check_permission from service.permission import check_permission
from tools.jwt_tools import User from tools.jwt_tools import User
...@@ -15,17 +17,20 @@ router = APIRouter() ...@@ -15,17 +17,20 @@ router = APIRouter()
summary='添加账号权限', summary='添加账号权限',
description='添加账号权限') description='添加账号权限')
async def get_permission( async def get_permission(
fund_id, email, role, create_user_info: CreateUserInfo,
user: User = Depends(get_current_user), user: User = Depends(get_current_user),
permission_user_collect: AgnosticCollection = Depends(get_permission_user_collect), permission_user_collect: AgnosticCollection = Depends(get_permission_user_collect),
permission_role_collect: AgnosticCollection = Depends(get_permission_role_collect) permission_role_collect: AgnosticCollection = Depends(get_permission_role_collect)
): ):
# 检查是否有权限添加用户 # 检查是否有权限添加用户
is_auth = await check_permission(f'member_permission.{role}.add', fund_id, user.email, permission_user_collect, assert 'admin' not in create_user_info.roles, FundPermissionError()
is_auth = await check_permission([f'member_permission.{role}.add' for role in create_user_info.roles],
create_user_info.fund_id,
user.email, permission_user_collect,
permission_role_collect) permission_role_collect)
if is_auth: if is_auth:
query = {"fund_id": fund_id, "email": email} query = {"fund_id": create_user_info.fund_id, "email": create_user_info.email}
update = {"$addToSet": {"role": role}} update = {"$addToSet": {"role": {"$each": create_user_info.roles}}}
await permission_user_collect.update_one(query, update, upsert=True) await permission_user_collect.update_one(query, update, upsert=True)
return Response(data='') return Response(data='')
else: else:
......
...@@ -34,4 +34,4 @@ class CreateRole(BaseModel): ...@@ -34,4 +34,4 @@ class CreateRole(BaseModel):
class CreateUserInfo(BaseModel): class CreateUserInfo(BaseModel):
fund_id: str = Field(..., description='基金id') fund_id: str = Field(..., description='基金id')
email: str = Field(..., description='用户中心email') email: str = Field(..., description='用户中心email')
role: List[str] = Field([], description='角色') roles: List[str] = Field(..., description='角色')
...@@ -331,13 +331,23 @@ print(label_map) ...@@ -331,13 +331,23 @@ print(label_map)
async def create_default_role_and_user(fund_id, admin_email, permission_user_collect: AgnosticCollection, async def create_default_role_and_user(fund_id, admin_email, permission_user_collect: AgnosticCollection,
permission_role_collect: AgnosticCollection): permission_role_collect: AgnosticCollection):
admin_user = CreateUserInfo(fund_id=fund_id, email=admin_email, role=['admin']) admin_user = CreateUserInfo(fund_id=fund_id, email=admin_email, roles=['admin'])
await permission_user_collect.insert_one(admin_user.dict()) await permission_user_collect.insert_one(admin_user.dict())
default_roles = [CreateRole(**item, fund_id=fund_id, remark='系统创建').dict() for item in default_role_table] default_roles = [CreateRole(**item, fund_id=fund_id, remark='系统创建').dict() for item in default_role_table]
await permission_role_collect.insert_many(default_roles) await permission_role_collect.insert_many(default_roles)
async def check_permission(permission, fund_id, email, permission_user_collect, permission_role_collect): async def check_permission(for_check_permission_list, fund_id, email, permission_user_collect,
permission_role_collect):
"""
验证的权限同时都满足 返回True 否则返回False
:param for_check_permission_list:
:param fund_id:
:param email:
:param permission_user_collect:
:param permission_role_collect:
:return:
"""
this_fund_role = await permission_user_collect.find_one({'email': email, 'fund_id': fund_id}) this_fund_role = await permission_user_collect.find_one({'email': email, 'fund_id': fund_id})
if not this_fund_role: if not this_fund_role:
return False return False
...@@ -347,7 +357,7 @@ async def check_permission(permission, fund_id, email, permission_user_collect, ...@@ -347,7 +357,7 @@ async def check_permission(permission, fund_id, email, permission_user_collect,
permission_list = [item for sublist in data for item in sublist['permissions']] permission_list = [item for sublist in data for item in sublist['permissions']]
if 'all' in permission_list: if 'all' in permission_list:
return True return True
elif permission in permission_list: elif all(x in permission_list for x in for_check_permission_list):
return True return True
else: else:
return False return False
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment