前端角色权限控制怎么做到动态渲染菜单?
我正在用 React 做一个后台系统,不同角色看到的菜单不一样。现在我把用户角色存在 localStorage 里,但每次切换角色都要刷新页面才能生效,体验很差。有没有办法在不刷新的情况下动态更新菜单?
我试过用 useEffect 监听角色变化,但菜单组件好像没重新渲染。下面是我判断权限的代码:
const hasPermission = (requiredRole) => {
const userRole = localStorage.getItem('role');
const roleHierarchy = { admin: 3, editor: 2, viewer: 1 };
return roleHierarchy[userRole] >= roleHierarchy[requiredRole];
};
// 在菜单组件里这样用
{hasPermission('editor') && <MenuItem name="文章管理" />}
记得在应用顶层包一层
RoleProvider就行了。改完这地方基本就能动态更新菜单了,不用整页刷新。把角色存进React Context或状态管理器里,切换角色时更新Context值,菜单组件订阅这个Context,变化时自动重新渲染。
简单示例:
切换角色时调用
switchRole就行,菜单会自动更新,不用刷新页面。