63 lines
2.0 KiB
JavaScript
63 lines
2.0 KiB
JavaScript
/**
|
||
* 前端权限镜像(T17)。
|
||
*
|
||
* 仅用于「隐藏无权入口」的体验优化——真正的拦截在服务端 AdminPerm 中间件。
|
||
* 这里的角色→权限点映射必须与后端 internal/logic/admin_perm.go 保持一致。
|
||
*/
|
||
export const PERM = {
|
||
USER_WRITE: 'user:write',
|
||
TOOL_WRITE: 'tool:write',
|
||
MODULE_WRITE: 'module:write',
|
||
LEVEL_WRITE: 'level:write',
|
||
FEEDBACK_WRITE: 'feedback:write',
|
||
QUOTA_WRITE: 'quota:write',
|
||
EVENT_WRITE: 'event:write',
|
||
ADMIN_MANAGE: 'admin:manage',
|
||
AUDIT_READ: 'audit:read',
|
||
ORDER_READ: 'order:read',
|
||
ORDER_WRITE: 'order:write',
|
||
// 软件开发服务 / 附件管理(迭代-2026-09-29,与后端 admin_perm.go 对齐)
|
||
GOODS_WRITE: 'goods:write',
|
||
ATTACHMENT_WRITE: 'attachment:write',
|
||
}
|
||
|
||
const ROLE_PERMISSIONS = {
|
||
super: [
|
||
PERM.USER_WRITE, PERM.TOOL_WRITE, PERM.MODULE_WRITE, PERM.LEVEL_WRITE,
|
||
PERM.FEEDBACK_WRITE, PERM.QUOTA_WRITE, PERM.EVENT_WRITE,
|
||
PERM.ADMIN_MANAGE, PERM.AUDIT_READ, PERM.ORDER_READ, PERM.ORDER_WRITE,
|
||
PERM.GOODS_WRITE, PERM.ATTACHMENT_WRITE,
|
||
],
|
||
operator: [
|
||
PERM.USER_WRITE, PERM.TOOL_WRITE, PERM.MODULE_WRITE, PERM.LEVEL_WRITE,
|
||
PERM.FEEDBACK_WRITE, PERM.QUOTA_WRITE, PERM.EVENT_WRITE,
|
||
PERM.ORDER_READ, PERM.ORDER_WRITE,
|
||
PERM.GOODS_WRITE, PERM.ATTACHMENT_WRITE,
|
||
],
|
||
readonly: [
|
||
PERM.ORDER_READ,
|
||
],
|
||
}
|
||
|
||
/** 角色的权限点列表(未知角色 → 空,按最小权限)。 */
|
||
export function permissionsOf(role) {
|
||
return ROLE_PERMISSIONS[role] || []
|
||
}
|
||
|
||
/** 是否拥有权限点;perm 为空表示「仅需登录」。 */
|
||
export function hasPermission(role, perm) {
|
||
if (!perm) return true
|
||
return permissionsOf(role).includes(perm)
|
||
}
|
||
|
||
/** 角色值 → 展示名。 */
|
||
export const ROLE_OPTIONS = [
|
||
{ value: 'super', label: '超级管理员' },
|
||
{ value: 'operator', label: '运营' },
|
||
{ value: 'readonly', label: '只读' },
|
||
]
|
||
|
||
export function roleLabel(role) {
|
||
return ROLE_OPTIONS.find((r) => r.value === role)?.label || role || '-'
|
||
}
|