前端权限控制架构设计:告别硬编码判断
在前端开发中,权限控制是保障系统安全的关键环节。如果每个页面都写死权限判断,就像在每个房间装一把不同的锁,管理起来不仅繁琐,还容易留下安全隐患。
现状与痛点
最近接手过一个项目,权限判断散落在上百个文件中。修改一条规则需要遍历所有相关文件,维护成本极高。这种分散式的判断逻辑,本质上是在制造混乱。
反面案例
// 反面教材:分散的权限判断
// 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
const permissions = {
admin: ['*'], // 管理员拥有所有权限
manager: ['user:view', 'user:edit', 'report:view'],
: [, ]
};
() {
userPermissions = permissions[user.] || [];
userPermissions.() || userPermissions.(permission);
}


