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

整理了一下原有的权限和新增的功能,对整体做一下总结。项目做的是一个灰度发布平台,使用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权限管理

    数据库设计 我的设计如下: 用户:fu_admin 角色:sys_role 权限:sys_purview 用户-角色:sys_user_role 角色-权限:sys_role_purview 标准的权 ...

  2. 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

    权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可 ...

  3. python通用权限管理框架图_通用权限管理设计篇_设计模式

    摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/  一.引言        因为做过的一些系统的权限管理的功能虽然在逐步完 ...

  4. 系统权限管理设计 (转)

    权限设计(初稿)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑 ...

  5. 通用权限管理设计篇_设计模式

    摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/  一.引言        因为做过的一些系统的权限管理的功能虽然在逐步完 ...

  6. 一个简易实用的web权限管理模块的应用与实现

    本文介绍一个简易实用的web权限管理模块的应用与实现. 先介绍数据模型和应用界面,后继对实现细节做选择性阐述. 数据表关系如下: 该图标明了登陆用户.角色.部门(机构).用户组.角色和模块功能之间的关 ...

  7. 通用权限管理设计 之 数据权限

    阅读目录 前言 初步分析 通用查询机制 数据权限规则 实际应用 结语 前言 前一篇文章<通用权限管理设计 之 数据库设计方案>介绍了[主体]- [领域] - [权限]( who.what. ...

  8. (转)通用权限管理设计 之 数据权限

    转自:leo's Space http://www.cnblogs.com/leoxie2011/archive/2012/03/20/2408542.html 阅读目录 前言 初步分析 通用查询机制 ...

  9. RBAC权限管理设计思想

    RBAC权限管理设计 一.概述 二.权限模型 三.RBAC模型 什么是RBAC模型 基本模型RBAC0 角色分层模型RBAC1 角色限制模型RBAC2 统一模型RBAC3 基于RBAC的延展--用户组 ...

最新文章

  1. 手把手教你搭建 Git 服务器
  2. Kvm虚拟机克隆以及添加磁盘
  3. 灵动微电子逐飞 智能车支持计划汇总
  4. SVN之文件同步更新
  5. java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制
  6. spring mvc学习(41):restful的crud的项目原型介绍
  7. CSS3动画 - 地球 - 指南针旋转
  8. VS2010平台下OpenCV编译和安装
  9. 基于统计的压缩算法:游程编码
  10. LeetCode Java面试刷题笔记汇总
  11. 2020年物联网平台调研报告
  12. python zip压缩文件
  13. python中import用法sys_python sys模块的常见用法汇总
  14. Git常用命令有哪些?
  15. 微信获取信息用户登录报错redirect_uri域名与后台配置不一致,错误码10003
  16. 关于虚拟机无法启动(The VMware Authorization Service is not running)
  17. 《洋妞》万像电影节揽四奖 或打造同名综艺节目
  18. (java)length与length() 的区别
  19. matlab踩坑 自带surf 函数找不了 surf 作为函数执行
  20. keil 软件,不带flash,使用Jlink调试程序

热门文章

  1. 音视频行业大势如何,优势在哪?
  2. 社区物业管理系统复盘
  3. 加密世界的价值捕获:谁是超级捕获者?
  4. SQL Server 数据挖掘在企业中的应用
  5. awk学习,从入门到实战
  6. 老款MBP安装双系统
  7. Python 爬取学习通图片并自动创建添加到PPT
  8. 国产手机新一轮洗牌:谁醒了,谁还在装睡
  9. mysql共享单车租赁系统_共享单车租赁需求预测
  10. mysql执行错误#1251 (mysql-front连接)解决方案