fix: allow admin role to edit in role-permissions page
Previously only provincial_admin could edit roles/permissions in the UI. Now admin (city-level admin) role can also edit. The backend already enforces fine-grained permission checks, so the UI gate just needs to match can_manage semantics.
This commit is contained in:
@@ -948,7 +948,7 @@ export default function RolePermissions() {
|
||||
// v3.3: 检查当前用户角色和地区
|
||||
const [currentUserRole, setCurrentUserRole] = useState('');
|
||||
const [currentUserArea, setCurrentUserArea] = useState('');
|
||||
const [isProvincialAdmin, setIsProvincialAdmin] = useState(false);
|
||||
const [canEdit, setCanEdit] = useState(false);
|
||||
const [isCityAdmin, setIsCityAdmin] = useState(false);
|
||||
|
||||
// 模态框状态
|
||||
@@ -1029,13 +1029,13 @@ export default function RolePermissions() {
|
||||
|
||||
setCurrentUserRole(userRole);
|
||||
setCurrentUserArea(userArea);
|
||||
setIsProvincialAdmin(userRole === 'provincial_admin');
|
||||
setCanEdit((userRole === 'provincial_admin' || userRole === 'admin'));
|
||||
setIsCityAdmin(userRole === 'admin');
|
||||
|
||||
console.log('🔑 [RolePermissions v3.3] 当前用户信息:', {
|
||||
role: userRole,
|
||||
area: userArea,
|
||||
isProvincialAdmin: userRole === 'provincial_admin',
|
||||
canEdit: (userRole === 'provincial_admin' || userRole === 'admin'),
|
||||
isCityAdmin: userRole === 'admin'
|
||||
});
|
||||
} catch (e) {
|
||||
@@ -1569,14 +1569,14 @@ export default function RolePermissions() {
|
||||
}
|
||||
};
|
||||
|
||||
// 保存权限 - v3.3: 同时保存路由权限和API权限,仅省级管理员可操作
|
||||
// 保存权限 - 省级管理员和地区管理员可操作
|
||||
// v3.5: 增加事务性操作和回滚机制
|
||||
const handleSavePermissions = async () => {
|
||||
if (!selectedRole) return;
|
||||
|
||||
// v3.3: 前置权限检查(仅省级管理员)
|
||||
if (!isProvincialAdmin) {
|
||||
toastService.error('权限不足:仅省级管理员可以修改角色路由权限');
|
||||
// 前置权限检查(省级管理员和地区管理员)
|
||||
if (!canEdit) {
|
||||
toastService.error('权限不足:仅省级管理员和地区管理员可以修改角色路由权限');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1593,7 +1593,7 @@ export default function RolePermissions() {
|
||||
// v3.3: 处理权限不足错误
|
||||
if (!routeResult.success) {
|
||||
if (routeResult.code === 4003) {
|
||||
toastService.error('权限不足:仅省级管理员可以修改角色路由权限');
|
||||
toastService.error('权限不足:仅省级管理员和地区管理员可以修改角色路由权限');
|
||||
} else {
|
||||
toastService.error(routeResult.message);
|
||||
}
|
||||
@@ -1741,7 +1741,7 @@ export default function RolePermissions() {
|
||||
checked={selectedPermissionIds.includes(permission.id)}
|
||||
onChange={(e) => handleTogglePermission(permission, e.target.checked)}
|
||||
style={{ margin: '3px 0 0 0', flexShrink: 0 }}
|
||||
disabled={!isProvincialAdmin}
|
||||
disabled={!canEdit}
|
||||
/>
|
||||
{isShared && (
|
||||
<span
|
||||
@@ -1831,7 +1831,7 @@ export default function RolePermissions() {
|
||||
}
|
||||
}}
|
||||
className="route-checkbox"
|
||||
disabled={!isProvincialAdmin}
|
||||
disabled={!canEdit}
|
||||
/>
|
||||
<label htmlFor={`route-${route.id}`} className="route-label">
|
||||
{route.icon && <i className={`${route.icon} route-icon`}></i>}
|
||||
@@ -1877,7 +1877,7 @@ export default function RolePermissions() {
|
||||
}
|
||||
}}
|
||||
className="route-checkbox"
|
||||
disabled={!isProvincialAdmin}
|
||||
disabled={!canEdit}
|
||||
/>
|
||||
<label htmlFor={`route-${route.id}`} className="route-label">
|
||||
{route.icon && <i className={`${route.icon} route-icon`}></i>}
|
||||
@@ -1963,7 +1963,7 @@ export default function RolePermissions() {
|
||||
type="primary"
|
||||
icon="ri-add-line"
|
||||
onClick={() => setShowCreateModal(true)}
|
||||
disabled={!isProvincialAdmin}
|
||||
disabled={!canEdit}
|
||||
>
|
||||
新建角色
|
||||
</Button>
|
||||
@@ -2058,11 +2058,11 @@ export default function RolePermissions() {
|
||||
<div className="permissions-tab">
|
||||
{/* v3.8: 固定头部区域 */}
|
||||
<div className="permissions-tab-header">
|
||||
{/* v3.3: 权限提示(仅省级管理员可修改) */}
|
||||
{!isProvincialAdmin && (
|
||||
{/* 权限提示(省级管理员和地区管理员可修改) */}
|
||||
{!canEdit && (
|
||||
<div className="form-notice warning" style={{ marginBottom: '12px' }}>
|
||||
<i className="ri-information-line"></i>
|
||||
<span>您当前为只读模式,仅省级管理员可以修改角色路由权限</span>
|
||||
<span>您当前为只读模式,仅省级管理员和地区管理员可以修改角色路由权限</span>
|
||||
</div>
|
||||
)}
|
||||
<div className="permissions-header">
|
||||
@@ -2097,7 +2097,7 @@ export default function RolePermissions() {
|
||||
type="primary"
|
||||
icon={savingPermissions ? "ri-loader-4-line spin" : "ri-save-line"}
|
||||
onClick={handleSavePermissions}
|
||||
disabled={!isProvincialAdmin || savingPermissions}
|
||||
disabled={!canEdit || savingPermissions}
|
||||
>
|
||||
{savingPermissions ? '保存中...' : '保存菜单与接口权限'}
|
||||
</Button>
|
||||
|
||||
Reference in New Issue
Block a user