开发者学堂课程【使用 Spring Data Redis+zTree 实现授权模型的设计与思考:给角色分配菜单的功能后台代码的编写】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/745/detail/13181
给角色分配菜单的功能后台代码的编写
内容介绍:
一、给角色分配菜单的功能后台代码
二、补充
一、给角色分配菜单的功能后台代码
提交后台程序的方法:module保存
*给角色分配菜单的功能
*@return
*@throws Exception
*/
@Action( "roleAction_module")
public string module( ) throws Exception {
return
“alist
”
返回值
添加的原因是添加保存之后,将数据分配完成后,重新跳转到角色的跳转页面,如果这么写就相当于跳转到运营。
37 @Results({ @Result(name = "alist", type = "redirectAction" , location = "roleAction _list")})返回到 alist,返回值是redirectAction" location = "roleAction _list 表示请求角色分页列表的方法,返回alist都会重定向到Alist这个方法,
//接收前端页面提交的数据
// model 模型驱动封装id值,选择属性驱动的方式封装勾选的菜单的 id 集合串
//角色的 id 值
String id = model. getId();
return "alist";
private String moduleIds;|
副id
可以提供该属性的get方法,通过属性驱动的方式就可以将属性驱动到,
//勾选的菜单的id集合串
return "alist";
private String moduleIds;
public String getModuleIds() {
屏幕截图Ctrl + Alt+ A
return moduleIds;
public void setModuleIds(String moduleIds) {
this . moduleIds = moduleIds;
程序,目的是给角色分配菜单,
//先把角色对象查询到
//再把菜单的对象查询到
//把菜单对象设置到角色的set集合中,含义:让角色拥有了这些菜单
//更新角色.
以上操作就更改了数据库
//先把角色对象查询到
Role role = roleService.get(id);
//再把菜单的对象查询到
菜单是多个菜单,假如一个个查询就比较慢,可以先进行遍历
//通过, 进行切割
String[] mids = moduleIds.split(",");
因为前段是将数据编成逗号传递过来的,所以先进行切割,切割数组,
for (String mid : mids) { 就可以查出菜单对象,
//再把菜单的对象查询到
Module module = moduleService. get(mid);
//把菜单对象设置到角色的set集合中,含义:让角色拥有了这些菜单
role.getModules() .add(module); 相当于将菜单对象加到集合中,数据就添加完成了
roleService. save0rUpdate(role);
return "alist";
程序出现了一个逻辑性的bug,
@Action(" roleAction_ module")
public
String
module()
throws
Exception {
0课时3: zTree插件的入门程序
接收前端页面提交的数据
// model 模型驱动封装id值,选择属性驱动的方式封装勾选的菜单的id集合串
String id = model. getId();
先把角色对象查询到
Role role = roleService. get(id);
//通过,进行切割
String[] mids = moduleIds.split(",");
For (String mid : mids) {
//再把菜单的对象查询到
Module module = moduleService . get(mid);
//把菜单对象设置到角色的set集合中,含义:让角色拥有了这些菜单
role . getModules() .add(module);
//更新角色
roleService. save0rUpdate(role);
return "alist";
二、补充
代码中勾选了一些角色菜单,拿到之后装到集合中,装了多少就相当于选择了多少,角色原来是拥有一些菜单的,所以选择的东西相当于在原来的基础上有追加了一些东西,所以用户可能将之前选中的菜单又取消了,取消掉之后意味着集合中就不存在这些菜单了,点击系统管理,角色管理,选中之后,点击菜单,结果如下
现在选中统计分析以下的几个内容,然后取消掉委托管理,所以运行后应该存在统计分析的几个复选框,并且不会显示取消的几个菜单,运行之后,跳转到非页列表,程序没有报错,勾选之后点击菜单,发现取消掉的几个委托管理,发票管理和财务管理都还存在
造成的原因就是直接向原来的集合中追加这些菜单,但已经取消掉了,所以module应该从这些集合中将这些菜单剪掉,然后添加新的。
解决思路有两种
(1)//清空role对象的set集合
role . getModules() .clear();
(2)//第二种方式: new set集合,把菜单存入到新的set集合中,把set集合设置给role对象
跟第一种类似,需要什么集合就装什么集合,然后重新更新这种方式,
将之前拥有的全部都清掉,然后这次选择什么 重新分配就好了,
重新刷新,选择系统管理,角色管理,选择和之前一样的,点击保存之后,勾选菜单,发现没有了。这就是给角色分配代码的一个工程。