手机版 网站建设 网站设计 网站开发 网站制作 16年专业品质
  • 微信
    微信二维码
  • 微博
  • 商城

后台系统菜单权限管理如何设计?

作者:admin  发布时间:2021-03-05 09:53:04

公司中的后台管理系统都会有权限管理,不同的角色有不同的菜单权限,那么他们是怎么设计的呢?

这里配合登录一起讲解一下吧!首先我们要明白,我们要实现的功能:1.用户和角色管理2.菜单管理(url管理)3.角色菜单权限管理3.登录拦截4.权限拦截5.登录和退出登录一、菜单权限管理要做好权限管理,表的设计很重要。

主要会用到如下表(下面设计很简单给出大概字段,具体根据项目扩展):1.tbl_urser用户表。字段包含id、userId、userName即可

2.tbl_role角色表。包含id、roleId、roleName即可

3.tbl_menu菜单表。包含id、menuId、parentMenuId、name、path等(菜单会有父级菜单)

4.tbl_menu_interface菜单接口表。包含id、menuId、url即可。这个表的存在可能会存在争议,很明显,它跟tbl_menu表存在一对多的关系。

这里的设计是:菜单就是单纯的左侧菜单栏的菜单,点进去菜单所进入的页面里面可能会包含很多url(比如页面需要的json接口),这些不认为是菜单,但是它挂在菜单下。于是就有了跟菜单一对多的关系。\

5.tbl_role_menu角色菜单表。角色和菜单多对多的关系表,表示某个角色拥有某个菜单的权限。同,角色拥有这个菜单的权限,自然就拥有了他下面的所有菜单接口的权限6.tbl_role_user角色用户表。这个很好理解,一个用户对应多个角色



二、登录拦截器逻辑表设计好了当然要功能实现,拦截器的设计包含两部分,登录拦截器和权限拦截器,登录拦截器放在前面。

1.判断访问的url是否需要登录。无需登录则直接跳过拦截器

2.如果需要登录,那么判断用户是否登录。这里怎么判断用户已经登录,是个问题。这个问题暂时跳过,等后面分析完登录功能,再看如何判断url是否需要登录,这个简单,在要访问的controller或者controller的方法上加上自定义注解,比如:@NoLogin,然后拦截器检查是否有这个注解,如果有则认为该url无需登录。



三、权限拦截器逻辑权限拦截的前提是用户登录成功

1.判断url是否需要权限拦截,同理也可以使用注解

2.如果需要进行权限校验,那么…我们可以根据登录态拿到userId(具体怎么拿到,往后看登录逻辑),有了userId,我们能获取该用户所拥有的角色,然后查询该角色所拥有的的菜单权限,找到所有的菜单接口权限,就能拿到有权限的URL了,然后看看他访问的这个url是否在他有权限的url中,在?那权限验证通过,反之,我拒绝当然,这里判断有点复杂,比较好的做法就是,提前将所有的角色和URL关系放入到缓存中(比如spring加载完,查询所有数据load到本地内存Map中),然后判断是否有权限时就简单了,类似于这样List<String> roleIdList = map.get(url),然后判断该用户所拥有的角色是否在roleIdList中四、登录(退出登录)逻辑还是用最传统的做法,登录当然离不开cookie在公司项目的开发,登录都会用公司统一的单点登录组件,点击我们系统的登录验证没有登录,会跳转到公司的单点登录,单点登录登录完成会重定向到我们自己系统的登录url,并且会在参数中带上token,重定向到我们自己系统的登录url后,接下来的逻辑如下:1.根据参数中的token,调用单点登录组件获取该用户信息,拿到userId,转换成我们自己的user对象(前面我们有个用户表)2.判断这个用户是否在我们库里存在,并且是否有相应的角色信息。如果没有抱歉,你没权限访问任何页面3.如果用户登陆成功了,那么生成一个随机的token(区别于前面请求参数里的token),保存到redis中,设置过期时间(登录过期时间),然后把这个token放到cookie中,设置cookie过期时间(跟前面一致)返回给客户端4.下次用户访问任何url,都会带上这个cookie(即token),登录拦截器拿到token查询缓存是否存在,如果存在说明该用户登录了,解释了前面登录拦截器如何判断用户是否登录的问题。5.退出登录,删除redis的key即可。注意:所有用户信息需要提前由管理员维护到表tbl_user中,以及用户的角色信息,菜单信息,权限信息等等 

上一篇: 如何挑选一个SEO友好的网站后台CMS 下一篇: 字符串拼接还在用StringBuilder?快试试Java8中的StringJoiner吧,真香!
返回列表
16年专业品质
互联网品牌推广专家
专业的建站、人机交互策划、高端UI设计、移动应用开发公司
业务电话:020/22373839    15915747484
业务QQ:641589319
业务QQ:1375530069
广州总部地址:广东省广州市越秀区先烈中路69号东山广场2904室 邮编:510111
海极网络微信二维码