1- def filter_data_permission (request : Request , model : Any ) -> ColumnElement [bool ]:
1+ def filter_data_permission (request_user : GetUserInfoWithRelationDetail , model : Any ) -> ColumnElement [bool ]:
22 """
3- 过滤用户数据权限
3+ 过滤数据权限,控制用户可见数据范围
44
5- :param request: 接口请求对象
5+ 使用场景:
6+ - 控制用户能看到哪些数据
7+
8+ :param request_user: 请求用户
69 :param model: 需要进行数据过滤的 sqlalchemy 模型
710 :return:
811 """
9- user = request .user
10-
1112 # 超级管理员可查看所有数据
12- if user .is_superuser :
13+ if request_user .is_superuser :
1314 return or_ (1 == 1 )
1415
15- user_id = user .id
16- user_roles = user .roles
17-
1816 # 无角色只能查看自己数据
19- if not user_roles :
20- return or_ (getattr (model , 'created_by' ) == user_id if hasattr (model , 'created_by' ) else 1 == 0 )
17+ if not request_user . roles :
18+ return or_ (getattr (model , 'created_by' ) == request_user . id if hasattr (model , 'created_by' ) else 1 == 0 )
2119
22- data_scope = min (role .data_scope for role in user_roles if role .status == 1 )
20+ data_scope = min (role .data_scope for role in request_user . roles if role .status == 1 )
2321 user_dept_id = user .dept_id
2422
2523 # 全部数据权限
@@ -28,8 +26,8 @@ def filter_data_permission(request: Request, model: Any) -> ColumnElement[bool]:
2826
2927 # 自定义数据权限
3028 elif data_scope == 1 :
31- dept_ids = select (sys_role_dept .c .dept_id ).where (
32- sys_role_dept .c .role_id .in_ (role .id for role in user_roles if role .status == 1 )
29+ dept_ids = select (role_dept .c .dept_id ).where (
30+ role_dept .c .role_id .in_ (role .id for role in request_user . roles if role .status == 1 )
3331 )
3432 return or_ (getattr (model , 'dept_id' ).in_ (dept_ids ) if hasattr (model , 'dept_id' ) else 1 == 0 )
3533
@@ -44,7 +42,7 @@ def filter_data_permission(request: Request, model: Any) -> ColumnElement[bool]:
4442
4543 # 仅本人数据权限
4644 elif data_scope == 4 :
47- return or_ (getattr (model , 'created_by' ) == user_id if hasattr (model , 'created_by' ) else 1 == 0 )
45+ return or_ (getattr (model , 'created_by' ) == request_user . id if hasattr (model , 'created_by' ) else 1 == 0 )
4846
4947 # 默认
5048 else :
0 commit comments