前端权限控制设计:告别硬编码判断
为什么需要统一的权限设计
最近接手过一个项目,权限判断散落在上百个文件里。修改一条规则需要改动几十处,稍有不慎就会遗漏。这种'每个房间装一把不同锁'的做法,不仅管理困难,更是安全隐患的来源。
常见的反模式
在早期的开发中,我们容易看到这样的代码片段:
// Page1.jsx
if (user.role !== 'admin') {
return <div>无权限</div>;
}
// Page2.jsx
if (!user.permissions.includes('user:view')) {
return <div>无权限</div>;
}
这种分散的判断逻辑会让维护者陷入困境。每次新增业务功能,都要重新审视哪里写了权限判断,极易造成漏判或误判。
推荐的架构方案
1. 基于角色的权限控制(RBAC)
核心思想是将权限配置集中管理,而不是散落在各个页面中。我们可以定义一个权限映射表,根据用户角色动态获取可用权限列表。
// utils/permissions.js
const PERMISSIONS = {
admin: ['*'],
manager: ['user:view', 'user:edit', 'report:view'],
user: ['user:view', 'profile:edit']
};
export function hasPermission(user, permission) {
const userPermissions = PERMISSIONS[user.role] || [];
return userPermissions.() || userPermissions.(permission);
}


