🔐 权限管理
权限管理概述
权限管理是管理后台的核心功能,用于控制用户对系统资源的访问。完善的权限系统可以保护数据安全,防止越权操作。
💡 核心概念
认证(Authentication):验证用户身份
授权(Authorization):验证用户是否有权限执行操作
RBAC 权限模型
RBAC(Role-Based Access Control)是基于角色的访问控制,是最常用的权限模型。
| 概念 | 说明 | 示例 |
|---|---|---|
| 用户(User) | 系统使用者 | 张三、李四 |
| 角色(Role) | 权限的集合 | 管理员、编辑、普通用户 |
| 权限(Permission) | 具体操作权限 | 查看用户、删除文章、导出报表 |
| 资源(Resource) | 被保护的对象 | 用户模块、文章模块、订单模块 |
权限实现方案
1. 菜单权限
根据用户角色动态生成可访问的菜单。
// 根据权限过滤菜单
const filterMenus = (menus, permissions) => {
return menus.filter(menu => {
if (!menu.permission) return true;
return permissions.includes(menu.permission);
}).map(menu => ({
...menu,
children: filterMenus(menu.children || [], permissions)
}));
};
2. 路由权限
通过路由守卫控制页面访问。
// Vue Router 守卫
router.beforeEach((to, from, next) => {
const permissions = getPermissions();
if (to.meta.permission && !permissions.includes(to.meta.permission)) {
next('/403');
} else {
next();
}
});
// React Router 守卫
const PrivateRoute = ({ children, permission }) => {
const hasPermission = usePermission(permission);
return hasPermission ? children : navigate('/403');
};
3. 按钮权限
控制页面内按钮的显示/隐藏。
// 权限指令(Vue)
app.directive('permission', {
mounted(el, binding) {
const { value } = binding;
const permissions = getPermissions();
if (value && !permissions.includes(value)) {
el.parentNode?.removeChild(el);
}
}
});
// 权限组件(React)
const AuthButton = ({ permission, children }) => {
const hasPermission = usePermission(permission);
return hasPermission ? children : null;
};
Token 认证流程
| 步骤 | 说明 |
|---|---|
| 1. 用户登录 | 提交用户名密码到后端 |
| 2. 后端验证 | 验证通过后生成 JWT Token |
| 3. 前端存储 | 将 Token 存储到 localStorage 或 Cookie |
| 4. 请求携带 | 每次请求在 Header 中携带 Token |
| 5. 后端验证 | 验证 Token 有效性,返回数据 |
| 6. Token 刷新 | Token 过期时使用 Refresh Token 刷新 |
权限管理最佳实践
- ✅ 前后端双重验证:前端控制 UI,后端控制数据
- ✅ 最小权限原则:默认无权限,按需分配
- ✅ 权限缓存:避免频繁请求权限接口
- ✅ 动态权限:支持运行时更新权限
- ✅ 操作日志:记录所有敏感操作
- ✅ Token 安全:使用 HTTPS,设置合理过期时间