蓝云ERP系统项目笔记——权限分配(11)

1、权限系统分析与构建

1.1、需求与实现思路

(1)每个用户登陆进去看到的菜单应该取决于他们所拥有的权限,对于不同的用户,他们进入系统后看到的菜单可能是不同的。

(2)如果对每个用户都去设置权限,操作起来是非常繁琐的。实际中很多用户的权限是一样的。我们把这多个权限合起来,给它一个名称叫角色(有的系统称为“用户组”)。这样我们通过角色设置权限,即一个角色可以有多个权限(菜单项),一个权限也可以被多个角色同时拥有。在这种情况下,角色和权限之间就是典型的多对多关联

(3)每个角色包含了很多权限(菜单),那么用户指定为某种角色,即拥有该角色的权限。实际中一个用户可能同时拥有多种角色,而一个角色又包含了很多个用户。那么用户与角色之间又是典型的多对多关系。

(4)一个标准的权限系统包括哪些表呢?刚才我们提到了用户、角色、权限,这就是三张表。用户与角色的关系是多对多,对于多对多关系,我们通常会使用中间表来存储它们的关系。那么对应的角色与权限的关系,也会有中间表。因此,权限系统涉及的表就有5个了。

蓝云ERP系统项目笔记——权限分配(11)

1.2、角色管理

代码生成器已经帮我们生成好了

1.3、建立多对多的关联

(1)角色与权限

修改Role实体类,添加属性menus,表示该角色下拥有哪些菜单权限

蓝云ERP系统项目笔记——权限分配(11)

 修改role.hbm.xml,添加多对多关联

蓝云ERP系统项目笔记——权限分配(11)

(2)用户与角色

修改Emp(用户)实体类,添加属性roles,表示该用户拥有哪些角色

蓝云ERP系统项目笔记——权限分配(11)

 修改emp.hbm.xml文件,添加与角色多对多的关联

蓝云ERP系统项目笔记——权限分配(11)

2、角色与权限

2.1、需求分析

蓝云ERP系统项目笔记——权限分配(11) 

2.2、认识Tree控件

蓝云ERP系统项目笔记——权限分配(11) 

2.3、代码实现

(1)Tree控件----显示菜单

构建实体类tree

查看API文档:

蓝云ERP系统项目笔记——权限分配(11)

 在erp_entity工程中创建实体类Tree

蓝云ERP系统项目笔记——权限分配(11)

蓝云ERP系统项目笔记——权限分配(11)

蓝云ERP系统项目笔记——权限分配(11) 

业务层实现

IRoleBiz添加接口方法readRoleMenus

蓝云ERP系统项目笔记——权限分配(11) 

RoleBiz修改:

引入MenuDao

蓝云ERP系统项目笔记——权限分配(11)

 修改Tree实体类:

蓝云ERP系统项目笔记——权限分配(11)

添加方法实现

蓝云ERP系统项目笔记——权限分配(11)

蓝云ERP系统项目笔记——权限分配(11) 

Action层编写

蓝云ERP系统项目笔记——权限分配(11) 

运行测试

蓝云ERP系统项目笔记——权限分配(11) 

前端编写

创建roleMenuSet.html

蓝云ERP系统项目笔记——权限分配(11) 

创建roleMenuSet.js

蓝云ERP系统项目笔记——权限分配(11) 

访问:roleMenuSet.html

蓝云ERP系统项目笔记——权限分配(11) 

(2)Tree控件-读取权限

 修改IRoleBiz和RoleBiz的readRoleMenus方法,添加参数uuid为角色编号,并修改该方法:

蓝云ERP系统项目笔记——权限分配(11)

蓝云ERP系统项目笔记——权限分配(11) 

Action修改

蓝云ERP系统项目笔记——权限分配(11) 

修改roleMenuSet.js的url

蓝云ERP系统项目笔记——权限分配(11) 

访问页面

蓝云ERP系统项目笔记——权限分配(11) 

(3)角色列表

修改页面roleMenuSet.html

效果如图:

蓝云ERP系统项目笔记——权限分配(11)

 蓝云ERP系统项目笔记——权限分配(11)

修改roleMenuSet.js

蓝云ERP系统项目笔记——权限分配(11) 

(4)实现角色列表与树控件的联动效果

修改roleMenuSet.js

蓝云ERP系统项目笔记——权限分配(11) 

运行结果

蓝云ERP系统项目笔记——权限分配(11) 

(5)保存权限

业务层编写

给IRoleBiz添加updateRoleMenus方法与实现

蓝云ERP系统项目笔记——权限分配(11)

 Action层编写

蓝云ERP系统项目笔记——权限分配(11)

前端编写

页面修改:

蓝云ERP系统项目笔记——权限分配(11) 

Js修改: 初始化方法中,添加

蓝云ERP系统项目笔记——权限分配(11) 

3、用户角色设置

3.1、需求分析

一个用户可以指定多个角色,实现思路与角色权限设置相同

3.2、代码实现

(1)业务层实现

在IEmpBiz中添加接口方法:

 蓝云ERP系统项目笔记——权限分配(11)

 在EmpBiz中实现:

注入RoleDao

蓝云ERP系统项目笔记——权限分配(11)

 蓝云ERP系统项目笔记——权限分配(11)

蓝云ERP系统项目笔记——权限分配(11) 

 (2)修改EmpAction

蓝云ERP系统项目笔记——权限分配(11)

(3)创建用户角色设置页面empRoleSet.html

 蓝云ERP系统项目笔记——权限分配(11)

(4)​​​​​​​创建empRoleSet.js

 蓝云ERP系统项目笔记——权限分配(11)

蓝云ERP系统项目笔记——权限分配(11) 

4、显示权限菜单

4.1、需求及实现思路

要求:用户登陆后只显示他拥有的菜单,多对多关联查询:

涉及到的实体类:

用户         角色         菜单

5个表的查询:

根据用户ID查询该用户所拥有的菜单,多对多关联查询:

用户(EMP) => 角色(ROLE)=> 菜单(MENU)

HQL:

Select m from Emp e join e.roles r join r.menus m where e.uuid=?

4.2、代码实现

(1)根据用户编号查询菜单列表

修改IMenuDao及MenuDao,添加方法:

蓝云ERP系统项目笔记——权限分配(11)

 修改IMenuBiz及MenuBiz,添加方法getMenusByEmpuuid

蓝云ERP系统项目笔记——权限分配(11)

修改改MenuAction,添加方法:

蓝云ERP系统项目笔记——权限分配(11)

 测试输出结果

蓝云ERP系统项目笔记——权限分配(11)

数据为数组,且全部都是二级菜单,这种数据格式无法在页面加载成菜单

(2)根据权限显示

思路分析:

菜单clone,只复制该用户下所拥有的菜单,如果有二级菜单的话必须复制其上一级菜单。

蓝云ERP系统项目笔记——权限分配(11)

修改MenuBiz,增加方法,用于复制Menu

蓝云ERP系统项目笔记——权限分配(11)

增加readMenusByEmpuuid方法

蓝云ERP系统项目笔记——权限分配(11)

 蓝云ERP系统项目笔记——权限分配(11)

 蓝云ERP系统项目笔记——权限分配(11)

 修改MenuAction中的getMenuTree方法:

蓝云ERP系统项目笔记——权限分配(11)

 5、知识点总结

5.1、 多对多关联设置

 

 

5.2、多对多关联查询

5.3、Tree控件使用