RBAC-动态菜单实现
由于在实际的应用系统中,一个用户一个角色远远满足不了需求。如果我们希望一个用户即担任运营人员,又是his自建用户。该怎么做呢?为了增加系统设计的适用性,我们通常设计:
- 一个用户有一个或多个角色;
- 一个角色包含多个用户;
- 一个角色有多种权限;
- 一个权限具有多个角色。
设计基础:用户、角色、菜单(权限)三大核心表,加上用户角色、角色菜单两个映射表(用于给用户表关联上权限表)。这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个菜单。
用到5张表:用户表(sys_user)、角色表(sys_role)、菜单表(sys_menu)、用户角色表(sys_user_role)、角色菜单表(sys_role_menu)
五张表的关系大致如下(从网上找的 如有影响 请联系)
流程如下 :
- 1,登录验证通过,根据用户id,查询用户角色表(sys_user_role)获取该用户拥有的所有角色id。
- 2,获得的所有角色id,查询角色表(sys_role),获取所有角色名称(这个步骤可选,如果需要展示用户角色的话)。
- 3,根据获得的该用户角色id,查询角色菜单表(sys_role_menu),获取该用户的所有菜单id
- 4,根据获得的菜单id,查询菜单表(sys_menu)获得该用户id所拥有的所有菜单信息,从而得到完整用户菜单列表。
大致代码如下
1 2 3 4 5 6 7 | SELECT * FROM sys_user user INNER JOIN sys_user_role a on user .id = a.user_id INNER JOIN sys_role_menu b INNER JOIN sys_menu c ON a.role_id=b.role_id AND b.menu_id=c.id WHERE user .phone_number= '10000000001' |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)