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'

  

 

posted @   彷佛昨天  阅读(197)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示