Java Web权限管理设计及实现

 最近在做一个权限相关的功能,在项目原有权限管理上面进行扩展,一方面支持界面上控制到按钮级别,后端接口没有权限不能进行访问;另一个方面,对项目中应用管理模块的应用管理员授权,使其具有对其名下的应用添加用户的权限,而不必像原来一样,所有的用户都必须系统管理员进行添加。

 整理了一下原有的权限和新增的功能,对整体做一下总结。项目做的是一个灰度发布平台,使用spring+springMvc+mybatis,前端框架是bootstrap,权限是使用的shiro,前端使用了一个adminLte的前端框架。

数据库设计:

1、菜单权限:

  • 用户表(user): 存储用户基本信息
  • 角色表(role): 存储系统角色信息
  • 角色-用户关联表(role-user):存储角色和用户的对应关系(n:n)
  • 资源表(resource):存储系统菜单资源,包括上级菜单,子菜单,按钮,按层级进行标识
  • 资源-角色关联表(resource-role):存储资源和角色的对应关系(n:n)
2、数据权限:
  • 应用表(application):存储系统中应用信息
  • 角色-应用关联表(role-application) :对应用关联角色(n:n)
  • 用户-应用关联表(user-application):将用户和应用进行关联,为用户分配对应的应用权限,比如应用管理员,研发人员,用户等。

具体实现:

简单记录一下实现逻辑吧,代码就不贴了。
菜单权限:
 首先对实现资源管理的功能,对基本的资源基础数据进行CRUD的操作。
 然后是角色管理的功能,实现对角色进行CRUD操作的功能,然后实现对角色分配资源,使用了ztree进行展示,显示用户具有的最大资源权限,关联查询稍复杂一点,不过也没什么难度。
 随后就是用户管理了,要做的也是基本CRUD,然后对用户关联角色。
数据权限:
 数据权限包括对角色关联应用和对应用分配用户并赋予不同的权限两部分。
 首先实现对应用进行CRUD的功能,然后在角色管理中添加为角色分配应用的功能。
 然后实现应用管理员添加应用用户的功能。
实现过程中遇到几个问题:
1、精确到按钮的权限如何控制?
 这里解决的时候做了两部分工作,一方面是前端控制按钮不显示,在点击对应界面的时候,会将该页面所具有的按钮权限给返回,前端通过js来判断界面中所需要显示的按钮;
 另一方面,将资源中每个按钮对应的api存入数据库,通过shiro自定义过滤器,判断用户是否具有改接口的访问权限。如果使用的不是shiro,可以自定义filter实现该功能。
 Apache Shiro自定义过滤器过程可参考: http://blog.csdn.net/lpy1239064101/article/details/79186291
2、应用的管理员从哪儿分配,如何解决应用中不同权限用户的资源分配问题,如何分配用户?
 首先在用户新建应用的时候,将创建者设置为该应用的管理员,写入到“用户-应用”关联表中,这样改应用就有了默认的管理员,然后在角色管理中默认创建三个固定角色名称的角色:appAdmin,appDeploy,appUser,对其分别分配不同的资源权限,这样写的缺点就是不太灵活。有了应用管理员,只要对他授予添加用户的权限,也就解决了分配应用用户的问题。

界面交互:

资源:
Java Web权限管理设计及实现_第1张图片
角色:
Java Web权限管理设计及实现_第2张图片
分配资源:
Java Web权限管理设计及实现_第3张图片
关联应用:
Java Web权限管理设计及实现_第4张图片
用户:
Java Web权限管理设计及实现_第5张图片
分配角色:
Java Web权限管理设计及实现_第6张图片
应用管理:
Java Web权限管理设计及实现_第7张图片

看到网上有说按钮权限可以通过自定义标签的方式解决,还没尝试,可行的话,再进行补充。

你可能感兴趣的:(Java)