feat: 给用户管理添加按钮级权限控制

This commit is contained in:
2025-02-22 02:40:52 +08:00
parent 003e7b8742
commit 0c97feade2
5 changed files with 108 additions and 135 deletions

View File

@@ -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))