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:
wren
2026-04-30 11:36:11 +08:00
parent 55e2c6993f
commit e2ae791fa2
+16 -16
View File
@@ -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>