feat: 给用户管理添加按钮级权限控制
This commit is contained in:
@@ -8,8 +8,8 @@
|
||||
from typing import Union
|
||||
|
||||
from tortoise.expressions import Q
|
||||
|
||||
from models import User, UserRole, RolePermission
|
||||
from fastapi import Request
|
||||
from models import User, UserRole, RolePermission, Department
|
||||
from utils.common import filterKeyValues
|
||||
|
||||
|
||||
@@ -65,6 +65,8 @@ class QueryController:
|
||||
userRole = await filterKeyValues(userRoles, "role_code")
|
||||
# 获取用户角色ID
|
||||
userRoleIds = await filterKeyValues(userRoles, "role_id")
|
||||
# 获取用户下属部门
|
||||
subDepartments = await cls.get_sub_department_ids(department_id=userInfo['department_id'])
|
||||
# 根据用户角色ID获取用户权限
|
||||
permissions = []
|
||||
for item in userRoleIds:
|
||||
@@ -78,6 +80,7 @@ class QueryController:
|
||||
permissions = list(set(permissions))
|
||||
userInfo["roles"] = userRole
|
||||
userInfo["permissions"] = permissions
|
||||
userInfo["sub_departments"] = subDepartments
|
||||
return userInfo
|
||||
|
||||
@classmethod
|
||||
@@ -92,12 +95,12 @@ class QueryController:
|
||||
return await User.get_or_none(Q(username=username) | Q(email=email) | Q(phone=phone), del_flag=1)
|
||||
|
||||
@classmethod
|
||||
async def get_user_permissions(cls, user_id: str) -> Union[list, None]:
|
||||
async def get_user_permissions(cls, user_id: str,sub_departments: list = []) -> Union[list, None]:
|
||||
"""
|
||||
获取用户权限
|
||||
"""
|
||||
# 获取用户角色
|
||||
userRoles = await UserRole.filter(user_id=user_id, del_flag=1).values(
|
||||
userRoles = await UserRole.filter(user_id=user_id, del_flag=1, user__department__id__in=sub_departments).values(
|
||||
role_id="role__id",
|
||||
role_name="role__name",
|
||||
role_code="role__code"
|
||||
@@ -133,3 +136,16 @@ class QueryController:
|
||||
)
|
||||
permissions.extend(permission)
|
||||
return permissions
|
||||
|
||||
@classmethod
|
||||
async def get_sub_department_ids(cls, department_id: str) -> list:
|
||||
# 递归获取指定部门及其所有下属部门的 ID
|
||||
async def fetch_sub_deps(dep_id: str):
|
||||
sub_deps = await Department.filter(parent_id=dep_id).all()
|
||||
sub_deps_list = [dep.id for dep in sub_deps]
|
||||
for sub_dep in sub_deps:
|
||||
sub_deps_list.extend(await fetch_sub_deps(sub_dep.id)) # 递归获取下属部门
|
||||
return sub_deps_list
|
||||
dataList = await fetch_sub_deps(department_id)
|
||||
dataList.append(department_id)
|
||||
return list(set(dataList))
|
||||
|
||||
Reference in New Issue
Block a user