前端权限控制设计:告别硬编码判断
现状与痛点
在前端开发中,权限控制往往是容易被忽视却至关重要的环节。曾见过一个项目,权限校验逻辑散落在上百个文件中,修改一条规则需要改动数十处代码,维护成本极高,甚至可能导致严重的逻辑漏洞。
这种分散的写法不仅让代码难以阅读,更埋下了安全隐患。想象一下,每个页面都独立处理权限,就像在每个房间装一把不同的锁,管理起来极其困难。
典型反例
// Page1.jsx
if (user.role !== 'admin') {
return <div>无权限</div>;
}
// Page2.jsx
if (!user.permissions.includes('user:view')) {
return <div>无权限</div>;
}
// Page3.jsx
if (user.role !== 'admin' && user.role !== 'manager') {
return <div>无权限</div>;
}
风险警示:权限判断散落各处,一旦业务规则变更,你需要遍历所有相关文件进行修改。这不仅效率低下,还极易遗漏,导致越权访问或功能不可用。
重构思路:集中化管理
要解决上述问题,核心在于将权限逻辑从业务组件中剥离,建立统一的权限管理体系。以下是几种经过验证的实现方案。
1. 基于角色的权限控制(RBAC)
通过角色映射权限,实现配置与逻辑分离。在 permissions/index.js 中集中定义角色与权限的对应关系,并提供统一的检查函数。
// permissions/index.js
const permissions = {
admin: ['*'], // 超级管理员拥有所有权限
manager: ['user:view', , ],
: [, ]
};
() {
userPermissions = permissions[user.] || [];
userPermissions.() || userPermissions.(permission);
}


