fix: make SUPER_ADMIN role checks case-insensitive across app
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
This commit is contained in:
@ -19,8 +19,8 @@ def get_current_user_permissions():
|
|||||||
user_role = claims.get('role')
|
user_role = claims.get('role')
|
||||||
if not user_role:
|
if not user_role:
|
||||||
return []
|
return []
|
||||||
# 超级管理员返回所有字段权限
|
# 超级管理员返回所有字段权限 (忽略大小写)
|
||||||
if user_role == 'super_admin':
|
if user_role.upper() == 'SUPER_ADMIN':
|
||||||
return ['system_user:*']
|
return ['system_user:*']
|
||||||
perm_dict = AuthService.get_user_permissions(user_role)
|
perm_dict = AuthService.get_user_permissions(user_role)
|
||||||
# 合并菜单和元素权限
|
# 合并菜单和元素权限
|
||||||
|
|||||||
@ -22,8 +22,8 @@ def get_current_user_permissions():
|
|||||||
user_role = claims.get('role')
|
user_role = claims.get('role')
|
||||||
if not user_role:
|
if not user_role:
|
||||||
return []
|
return []
|
||||||
# 超级管理员返回所有字段权限
|
# 超级管理员返回所有字段权限 (忽略大小写)
|
||||||
if user_role == 'super_admin':
|
if user_role.upper() == 'SUPER_ADMIN':
|
||||||
return ['bom_manage:*']
|
return ['bom_manage:*']
|
||||||
perm_dict = AuthService.get_user_permissions(user_role)
|
perm_dict = AuthService.get_user_permissions(user_role)
|
||||||
# 合并菜单和元素权限
|
# 合并菜单和元素权限
|
||||||
|
|||||||
@ -20,8 +20,8 @@ def get_current_user_permissions():
|
|||||||
user_role = claims.get('role')
|
user_role = claims.get('role')
|
||||||
if not user_role:
|
if not user_role:
|
||||||
return []
|
return []
|
||||||
# 超级管理员返回所有字段权限
|
# 超级管理员返回所有字段权限 (忽略大小写)
|
||||||
if user_role == 'super_admin':
|
if user_role.upper() == 'SUPER_ADMIN':
|
||||||
# 返回所有以 inbound_buy: 开头的权限码(这里我们返回一个特殊标记,表示全部)
|
# 返回所有以 inbound_buy: 开头的权限码(这里我们返回一个特殊标记,表示全部)
|
||||||
# 为了简单,我们返回 ['inbound_buy:*'],在过滤函数中特殊处理
|
# 为了简单,我们返回 ['inbound_buy:*'],在过滤函数中特殊处理
|
||||||
return ['inbound_buy:*']
|
return ['inbound_buy:*']
|
||||||
|
|||||||
@ -21,8 +21,8 @@ def get_current_user_permissions():
|
|||||||
user_role = claims.get('role')
|
user_role = claims.get('role')
|
||||||
if not user_role:
|
if not user_role:
|
||||||
return []
|
return []
|
||||||
# 超级管理员返回所有字段权限
|
# 超级管理员返回所有字段权限 (忽略大小写)
|
||||||
if user_role == 'super_admin':
|
if user_role.upper() == 'SUPER_ADMIN':
|
||||||
# 返回所有以 inbound_product: 开头的权限码(这里我们返回一个特殊标记,表示全部)
|
# 返回所有以 inbound_product: 开头的权限码(这里我们返回一个特殊标记,表示全部)
|
||||||
# 为了简单,我们返回 ['inbound_product:*'],在过滤函数中特殊处理
|
# 为了简单,我们返回 ['inbound_product:*'],在过滤函数中特殊处理
|
||||||
return ['inbound_product:*']
|
return ['inbound_product:*']
|
||||||
|
|||||||
@ -22,8 +22,8 @@ def get_current_user_permissions():
|
|||||||
user_role = claims.get('role')
|
user_role = claims.get('role')
|
||||||
if not user_role:
|
if not user_role:
|
||||||
return []
|
return []
|
||||||
# 超级管理员返回所有字段权限
|
# 超级管理员返回所有字段权限 (忽略大小写)
|
||||||
if user_role == 'super_admin':
|
if user_role.upper() == 'SUPER_ADMIN':
|
||||||
# 返回所有以 inbound_semi: 开头的权限码(这里我们返回一个特殊标记,表示全部)
|
# 返回所有以 inbound_semi: 开头的权限码(这里我们返回一个特殊标记,表示全部)
|
||||||
# 为了简单,我们返回 ['inbound_semi:*'],在过滤函数中特殊处理
|
# 为了简单,我们返回 ['inbound_semi:*'],在过滤函数中特殊处理
|
||||||
return ['inbound_semi:*']
|
return ['inbound_semi:*']
|
||||||
|
|||||||
@ -21,8 +21,8 @@ def get_current_user_permissions():
|
|||||||
user_role = claims.get('role')
|
user_role = claims.get('role')
|
||||||
if not user_role:
|
if not user_role:
|
||||||
return []
|
return []
|
||||||
# 超级管理员返回所有字段权限
|
# 超级管理员返回所有字段权限 (忽略大小写)
|
||||||
if user_role == 'super_admin':
|
if user_role.upper() == 'SUPER_ADMIN':
|
||||||
return ['inbound_service:*']
|
return ['inbound_service:*']
|
||||||
perm_dict = AuthService.get_user_permissions(user_role)
|
perm_dict = AuthService.get_user_permissions(user_role)
|
||||||
# 合并菜单和元素权限
|
# 合并菜单和元素权限
|
||||||
|
|||||||
@ -22,8 +22,8 @@ def get_current_user_permissions():
|
|||||||
user_role = claims.get('role')
|
user_role = claims.get('role')
|
||||||
if not user_role:
|
if not user_role:
|
||||||
return []
|
return []
|
||||||
# 超级管理员返回所有字段权限
|
# 超级管理员返回所有字段权限 (忽略大小写)
|
||||||
if user_role == 'super_admin':
|
if user_role.upper() == 'SUPER_ADMIN':
|
||||||
return ['outbound_list:*']
|
return ['outbound_list:*']
|
||||||
perm_dict = AuthService.get_user_permissions(user_role)
|
perm_dict = AuthService.get_user_permissions(user_role)
|
||||||
# 合并菜单和元素权限
|
# 合并菜单和元素权限
|
||||||
|
|||||||
@ -20,8 +20,8 @@ def get_current_user_permissions():
|
|||||||
user_role = claims.get('role')
|
user_role = claims.get('role')
|
||||||
if not user_role:
|
if not user_role:
|
||||||
return []
|
return []
|
||||||
# 超级管理员返回所有字段权限
|
# 超级管理员返回所有字段权限 (忽略大小写)
|
||||||
if user_role == 'super_admin':
|
if user_role.upper() == 'SUPER_ADMIN':
|
||||||
return ['*']
|
return ['*']
|
||||||
perm_dict = AuthService.get_user_permissions(user_role)
|
perm_dict = AuthService.get_user_permissions(user_role)
|
||||||
# 合并菜单和元素权限
|
# 合并菜单和元素权限
|
||||||
|
|||||||
@ -221,6 +221,15 @@ class AuthService:
|
|||||||
'elements': ['inbound_buy:unit_price', ...]
|
'elements': ['inbound_buy:unit_price', ...]
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
# 超级管理员返回所有权限(通配符)
|
||||||
|
from app.utils.constants import UserRole
|
||||||
|
if role_code == UserRole.SUPER_ADMIN:
|
||||||
|
# 返回通配符,表示拥有所有菜单和元素权限
|
||||||
|
return {
|
||||||
|
'menus': ['*'],
|
||||||
|
'elements': ['*']
|
||||||
|
}
|
||||||
|
|
||||||
# 1. 查菜单权限
|
# 1. 查菜单权限
|
||||||
menu_perms = SysRolePermission.query.filter_by(
|
menu_perms = SysRolePermission.query.filter_by(
|
||||||
role_code=role_code,
|
role_code=role_code,
|
||||||
@ -243,4 +252,4 @@ class AuthService:
|
|||||||
return {
|
return {
|
||||||
'menus': menu_codes,
|
'menus': menu_codes,
|
||||||
'elements': element_codes
|
'elements': element_codes
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,8 +63,8 @@ def permission_required(permission_code):
|
|||||||
|
|
||||||
claims = get_jwt()
|
claims = get_jwt()
|
||||||
user_role = claims.get('role')
|
user_role = claims.get('role')
|
||||||
# 超级管理员放行
|
# 超级管理员放行 (忽略大小写)
|
||||||
if user_role == 'super_admin':
|
if user_role and user_role.upper() == 'SUPER_ADMIN':
|
||||||
return fn(*args, **kwargs)
|
return fn(*args, **kwargs)
|
||||||
|
|
||||||
# 根据角色查询数据库中的权限
|
# 根据角色查询数据库中的权限
|
||||||
|
|||||||
@ -114,6 +114,10 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
|
|
||||||
// 判断当前用户是否拥有某个权限(菜单或元素)
|
// 判断当前用户是否拥有某个权限(菜单或元素)
|
||||||
const hasPermission = (code: string) => {
|
const hasPermission = (code: string) => {
|
||||||
|
// 超级管理员拥有所有权限
|
||||||
|
if (role.value && role.value.toUpperCase() === 'SUPER_ADMIN') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
return permissions.value.includes(code)
|
return permissions.value.includes(code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user