fix: permission (#3292)

This commit is contained in:
shaohuzhang1 2025-06-18 13:33:49 +08:00 committed by GitHub
parent fb4880f3f4
commit 4205dc902f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 19 additions and 14 deletions

View File

@ -151,13 +151,13 @@ def get_permission_list(user,
workspace_user_role_mapping_list = QuerySet(workspace_user_role_mapping_model).filter(user_id=user_id) workspace_user_role_mapping_list = QuerySet(workspace_user_role_mapping_model).filter(user_id=user_id)
workspace_user_role_mapping_dict = group_by(workspace_user_role_mapping_list, workspace_user_role_mapping_dict = group_by(workspace_user_role_mapping_list,
lambda item: item.workspace_id) lambda item: item.workspace_id)
role_id_list = list(set([workspace_user_role_mapping.role_id for workspace_user_role_mapping in
workspace_user_role_mapping_list]))
# 获取角色权限映射数据 # 获取角色权限映射数据
role_permission_mapping_list = QuerySet(role_permission_mapping_model).filter( role_permission_mapping_list = QuerySet(role_permission_mapping_model).filter(
role_id__in=[workspace_user_role_mapping.role_id for workspace_user_role_mapping in role_id__in=role_id_list)
workspace_user_role_mapping_list])
system_role_permission_mapping_list = get_default_role_permission_mapping_list()
role_permission_mapping_dict = group_by( role_permission_mapping_dict = group_by(
[*role_permission_mapping_list, *system_role_permission_mapping_list], lambda item: item.role_id) role_permission_mapping_list, lambda item: item.role_id)
workspace_user_permission_list = QuerySet(WorkspaceUserResourcePermission).filter( workspace_user_permission_list = QuerySet(WorkspaceUserResourcePermission).filter(
workspace_id__in=[workspace_user_role.workspace_id for workspace_user_role in workspace_id__in=[workspace_user_role.workspace_id for workspace_user_role in
@ -170,11 +170,15 @@ def get_permission_list(user,
workspace_permission_list = get_workspace_permission_list(role_permission_mapping_dict, workspace_permission_list = get_workspace_permission_list(role_permission_mapping_dict,
workspace_user_role_mapping_list) workspace_user_role_mapping_list)
system_role_permission_mapping_list = list(set([role_permission.permission_id for role_permission in
get_default_role_permission_mapping_list() if
role_id_list.__contains__(role_permission.role_id)]))
# 系统权限 # 系统权限
system_permission_list = [role_permission_mapping.permission_id for role_permission_mapping in system_permission_list = [role_permission_mapping.permission_id for role_permission_mapping in
role_permission_mapping_list] role_permission_mapping_list]
# 合并权限 # 合并权限
permission_list = system_permission_list + workspace_permission_list + workspace_resource_permission_list permission_list = system_permission_list + workspace_permission_list + workspace_resource_permission_list + system_role_permission_mapping_list
permission_list = list(set(permission_list))
cache.set(key, permission_list, version=version) cache.set(key, permission_list, version=version)
else: else:
workspace_id_list = ['default'] workspace_id_list = ['default']
@ -199,6 +203,7 @@ def get_permission_list(user,
[user.role].__contains__(role_permission_mapping.role_id)] [user.role].__contains__(role_permission_mapping.role_id)]
# 合并权限 # 合并权限
permission_list = system_permission_list + workspace_permission_list + workspace_resource_permission_list permission_list = system_permission_list + workspace_permission_list + workspace_resource_permission_list
permission_list = list(set(permission_list))
cache.set(key, permission_list, version=version) cache.set(key, permission_list, version=version)
return permission_list return permission_list
@ -220,13 +225,13 @@ def get_role_list(user,
if is_query_model: if is_query_model:
# 获取工作空间 用户 角色映射数据 # 获取工作空间 用户 角色映射数据
workspace_user_role_mapping_list = QuerySet(workspace_user_role_mapping_model).filter(user_id=user.id) workspace_user_role_mapping_list = QuerySet(workspace_user_role_mapping_model).filter(user_id=user.id)
workspace_list = [ role_list = [
f"{workspace_user_role_mapping.role_id}:/WORKSPACE/{workspace_user_role_mapping.workspace_id}" f"{workspace_user_role_mapping.role_id}:/WORKSPACE/{workspace_user_role_mapping.workspace_id}"
for for
workspace_user_role_mapping in workspace_user_role_mapping in
workspace_user_role_mapping_list] + [user.role] workspace_user_role_mapping_list] + [user.role]
cache.set(key, workspace_list, version=version) cache.set(key, workspace_list, version=version)
return workspace_list return role_list
else: else:
role_list = [user.role] role_list = [user.role]
if user.role == RoleConstants.ADMIN.value.__str__(): if user.role == RoleConstants.ADMIN.value.__str__():

View File

@ -16,7 +16,7 @@ from rest_framework.views import APIView
from common.auth.authenticate import TokenAuth from common.auth.authenticate import TokenAuth
from common.auth.authentication import has_permissions from common.auth.authentication import has_permissions
from common.constants.cache_version import Cache_Version from common.constants.cache_version import Cache_Version
from common.constants.permission_constants import PermissionConstants, Permission, Group, Operate from common.constants.permission_constants import PermissionConstants, Permission, Group, Operate, RoleConstants
from common.log.log import log from common.log.log import log
from common.result import result from common.result import result
from maxkb.const import CONFIG from maxkb.const import CONFIG
@ -164,7 +164,7 @@ class UserManage(APIView):
tags=[_("User Management")], # type: ignore tags=[_("User Management")], # type: ignore
request=UserProfileAPI.get_request(), request=UserProfileAPI.get_request(),
responses=UserProfileAPI.get_response()) responses=UserProfileAPI.get_response())
@has_permissions(PermissionConstants.USER_CREATE) @has_permissions(PermissionConstants.USER_CREATE, RoleConstants.ADMIN)
@log(menu='User management', operate='Add user', @log(menu='User management', operate='Add user',
get_operation_object=lambda r, k: {'name': r.data.get('username', None)}) get_operation_object=lambda r, k: {'name': r.data.get('username', None)})
def post(self, request: Request): def post(self, request: Request):

View File

@ -2,7 +2,7 @@ import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/dat
const systemRouter = { const systemRouter = {
path: '/system', path: '/system',
name: 'system', name: 'system',
meta: { title: 'views.system.title', permission: 'USER_MANAGEMENT:READ' }, meta: { title: 'views.system.title' },
hidden: true, hidden: true,
component: () => import('@/layout/layout-template/SystemMainLayout.vue'), component: () => import('@/layout/layout-template/SystemMainLayout.vue'),
children: [ children: [