权限系统分析与构建
一.需求与实现思路
- . 每个用户登陆进去看到的菜单应该取决于他们所拥有的权限,对于不同的用户,他们进入系统后看到的菜单可能是不同的。
一个标准的权限系统包括哪些表呢?刚才我们提到了用户、角色、权限,这就是三张表。用户与角色的关系是多对多,对于多对多关系,我们通常会使用中间表来存储它们的关系。那么对应的角色与权限的关系,也会有中间表。因此,权限系统涉及的表就有5个了。 - 角色管理:代码生成器已经帮我们生成好了。
二.建立多对多关联
- 角色与权限
- 修改Role实体类,添加属性menus,表示该角色下拥有哪些菜单权限
- 修改role.hbm.xml,添加多对多关联
- 修改Role实体类,添加属性menus,表示该角色下拥有哪些菜单权限
- 用户与角色
- 修改Emp(用户)实体类,添加属性roles,表示该用户拥有哪些角色
- 修改emp.hbm.xml文件,添加与角色多对多的关联
- 修改Emp(用户)实体类,添加属性roles,表示该用户拥有哪些角色
角色权限设置
一.需求分析
- 需求
二.认识tree控件
- JS
三.Tree控件-显示菜单
- 构建实体类tree
查看API文档:
在erp_entity工程中创建实体类Tree - 业务层实现
IRoleBiz添加接口方法readRoleMenus
RoleBiz修改:
引入MenuDao - 修改Tree实体类:
- 添加方法实现
- Action端编写:
- 前端编写
创建roleMenuSet.html
创建roleMenuSet.js
访问:roleMenuSet.html
四.Tree控件-读取权限
- 修改IRoleBiz和RoleBiz的readRoleMenus方法,添加参数uuid为角色编号,并修改该方法:
- Action修改
- 修改roleMenuSet.js的url
- 访问页面
五.角色列表
- 修改页面roleMenuSet.html
效果如图: - 修改roleMenuSet.js
- 实现角色列表与树控件的联动效果
修改roleMenuSet.js
运行结果: - 保存权限
- 业务层编写
给IRoleBiz添加updateRoleMenus方法与实现
给RoleBiz添加updateRoleMenus方法与实现 - Action层编写
- 前端编写
页面修改:
Js修改: 初始化方法中,添加
- 业务层编写
用户角色设置
一.需求分析
- 一个用户可以指定多个角色,实现思路与角色权限设置相同
二.业务层实现
- 在IEmpBiz中添加接口方法:
- 在EmpBiz中实现:
注入RoleDao
方法实现
三.修改EmpAction
四.创建用户角色设置页面empRoleSet.html
五.创建empRoleSet.js
显示权限菜单
一.需求与实现思路
- 要求:用户登陆后只显示他拥有的菜单,多对多关联查询:
- 涉及到的实体类:
用户 角色 菜单 - 5个表的查询:
根据用户ID查询该用户所拥有的菜单,多对多关联查询:
用户(EMP) => 角色(ROLE)=> 菜单(MENU)
HQL:
Select m from Emp e join e.roles r join r.menus m where e.uuid=?
二.根据用户编号查询菜单列表
- 修改IMenuDao及MenuDao,添加方法:
- 修改IMenuBiz及MenuBiz,添加方法getMenusByEmpuuid
- 修改MenuAction,添加方法:
三.根据权限显示菜单
- 思路分析:
菜单clone,只复制该用户下所拥有的菜单,如果有二级菜单的话必须复制其上一级菜单。 - 修改MenuBiz,增加方法,用于复制Menu
- 增加readMenusByEmpuuid方法
实现方法 - 修改MenuAction中的getMenuTree方法: