基于SSM的RBAC权限系统(1)-利用ajax,bootstrap,ztree完成权限树功能
仅支持回显以及选择,不支持在树中的编辑
搭建后台回显以及修改的模块
JSON数据封装
public class Msg {
private int code;
private String msg;
private Map<String,Object> extend=new HashMap<String,Object>();
//还有一些getset方法没显示出来
public static Msg success(){
Msg result = new Msg();
result.setCode(100);
result.setMsg("处理成功");
return result;
}
public static Msg fail(){
Msg result = new Msg();
result.setCode(200);
result.setMsg("处理失败");
return result;
}
public static Msg noPermission(){
Msg result = new Msg();
result.setCode(250);
result.setMsg("没有权限");
return result;
}
public static Msg reject(){
Msg result = new Msg();
result.setCode(300);
result.setMsg("拒绝请求");
return result;
}
}
Controller中的代码,RequiredPermission为自定义注解
@ResponseBody
@RequiredPermission("树形分配:获得回显信息")
@RequestMapping("role/treePermission_echo")
public Msg treePermission_echo(@RequestParam("ID")Long ID) throws Exception{
//这里判断有无权限,具体原因请看其他文章
Throwable t = new Throwable();
boolean isHasPermission=PermissionUtil.hasPermission(this.getClass(),t.getStackTrace()[0].getMethodName());
if(!isHasPermission)
return Msg.noPermission().add("returnMsg","您没有权限【树形分配:获得回显信息】");
//从下一层获取ztree权限树数据
List<ZtreePermission> allZtreeMsg =
permissionService.getAllZtreeMsg(ID);
System.out.println();
return Msg.success().add("allZtreeMsg",allZtreeMsg);
} @ResponseBody
@RequiredPermission("树形分配:修改")
@RequestMapping("role/treePermission_alter")
public Msg treePermission_alter(@RequestParam("permissionListTree")List<String> permissionListTree
) throws Exception {
Throwable t = new Throwable();
boolean isHasPermission=PermissionUtil.hasPermission(this.getClass(),t.getStackTrace()[0].getMethodName());
if(!isHasPermission)
return Msg.noPermission().add("returnMsg","您没有权限【树形分配:修改】");
ArrayList<Long> permissionListID = new ArrayList<>();
Long ID=Long.valueOf(permissionListTree.get(0));
//判断是权限组还是权限,是权限则加入
for(String permissionID:permissionListTree){
if(permissionID.charAt(0)=='p'){
permissionListID.add(Long.valueOf(permissionID.substring(2,permissionID.length())));
}
}
//这里其实可以优化,我暂时采用了删除所有再更新的方法
roleToPermissionService.deleteById(ID);
for(Long id:permissionListID){
RoleToPermission roleToPermission=new RoleToPermission();
Role role = new Role();
role.setId(ID);
Permission permission=new Permission();
permission.setId(id);
roleToPermission.setRole(role);
roleToPermission.setPermission(permission);
roleToPermissionService.addItem(roleToPermission);
}
return Msg.success();
}
ztree树的构建
因为我需要的功能复杂度不高,所以ztree设定很简单
var setting = {
check: {
enable: true
},
data: {
simpleData: {
enable: true
}
}
};
var zNodes ;
function setCheck() {
var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
type = { "Y" : "ps", "N" : "ps" };
zTree.setting.check.chkboxType = type;
}
$(".treeBtn").each(function () {
$(this).click(function () {
ID = $(this).attr("name");
$.ajax({
url: "role/treePermission_echo",
//ID为你本次选择需要为哪个角色分配权限的角色ID
data: "ID=" + ID,
type: "POST",
success: function (result) {
if (result.code == 100) {
zNodes=result.extend.allZtreeMsg;
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
setCheck();
} else if(result.code==250){
//弹出权限不足的窗口
$("#btn_closeTree").click();
show_errorWindows(result.extend.returnMsg);
}
}
});
});
});
看看最简单的checkbox权限树结构
ztree非常方便,甚至不用我们自己写算法递归出树,因此只要将结构封装成一样的json丢给zNodes就可以了!
ztree对应的实体类
public class ZtreePermission {
String id;
String pId;
String name;
Boolean checked;
Boolean open;
public ZtreePermission(){
}
public ZtreePermission(Permission permission){
this.id="p."+permission.getId();
this.pId="g."+permission.getParentID();
this.name=permission.getName();
this.open=false;
this.checked=false;
}
public ZtreePermission(Permission_Groud permission_groud){
this.id="g."+permission_groud.getId();
this.pId="g."+permission_groud.getParentID();
this.name=permission_groud.getName();
this.checked=null;
this.open=true;
}
}
值得注意的是如果你有两张表而且id重复的话,可以这样 id=”student.1” pid=”teacher.2”
回显部分代码
这里只获取了ID,如果需要其他数据可以查看API文档
$("#btn_inputTree").click(function () {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
var nodes=zTree.getCheckedNodes(true);
permissionListTree = new Array();
//这里我把ID丟进了ID第一位,后台要注意!!
permissionListTree.push(ID);
for ( var j = 0; j < nodes.length; j++) {
permissionListTree.push(nodes[j].id);
}
$.ajax({
url: "role/treePermission_alter",
data: "permissionListTree="+permissionListTree,
type: "POST",
success: function (result) {
if(result.code ==100){
$("#btn_closeTree").click();
}else if(result.code==250){
$("#btn_closeTree").click();
//权限不足,显示窗口 show_errorWindows(result.extend.returnMsg);
}
}
});
});
最后来看看最简单窗口代码
<div class="modal fade" id="dtreeModal" tabindex="-1" role="dialog" aria-labelledby="preModalLabel">
<div class="modal-dialog">
<div class="modal-content">
<form role="form" action="" method="post">
<div class="modal-header">
<button data-dismiss="modal" class="close" type="button"><span
aria-hidden="true">×</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title">树形分配</h4>
</div>
<div class="modal-body" >
<div>
<ul id="treeDemo" class="ztree"></ul>
</div>
</div>
<div class="modal-footer">
<button id="btn_closeTree" data-dismiss="modal" class="btn btn-default" type="button">
关闭
</button>
<button id="btn_inputTree" class="btn btn-primary" type="button">提交</button>
</div>
</form>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div>
完整项目地址
这是我第一个写的web项目,代码烂得飞起,仅供纪念,不做参考
带Shiro版:https://github.com/EnTaroAdunZ/ssm_rbac_shiro.git
不带Shiro版:https://github.com/EnTaroAdunZ/ssm_rbac.git
---------------------
版权声明:本文为CSDN博主「EnTaroAdunZ」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/EnTaroAdunZ/article/details/76112781
基于SSM的RBAC权限系统(1)-利用ajax,bootstrap,ztree完成权限树功能的更多相关文章
- 简洁经常使用权限系统的设计与实现(一):构造权限菜单树的N(N>=4)种方法
权限系统.Web开发常见标准子系统之中的一个.结合自己的一些思考和实践,从本篇開始权限系统的设计与实现之路. 近期,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇.仅仅是大致介 ...
- 简洁常用权限系统的设计与实现(一):构造权限菜单树的N(N>=4)种方法
权限系统,Web开发常见标准子系统之一.结合自己的一些思考和实践,从本篇开始权限系统的设计与实现之路. 最近,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇,只是大致介绍下这个 ...
- 基于SSM的在线考试系统
本系统功能非常完善,页面美观大方,技术新颖,选用主流数据库Mysql,表数量及结构适当,如果你需要做在线考试或者其它考试类系统,这个系统将非常有用. 其实,任何考试系统,无非试题不一样,所以如果你是做 ...
- 基于SSM开发在线考试系统 Java源码
实现的关于在线考试的功能有:用户前台:用户注册登录.查看考试信息.进行考试.查看考试成绩.查看历史考试记录.回顾已考试卷.修改密码.修改个人信息等,后台管理功能(脚手架功能不在这里列出),科目专业管理 ...
- SSM框架,在Html界面利用ajax,json,jQuery实现省市区下拉框联动
1.先生成省市区表格 2.建立实体类 3.在html画出下拉框 <select id="province"> <option value="" ...
- 利用Ajax和Servlet实现输入框提示功能
目的和效果: 输入框输入字符串x,匹配后台传入的数据str,如果str中的元素包含字符串x,则提示. 后台代码: String x = request.ge ...
- 十二、基于Django实现RBAC权限管理
一.RBAC概述 RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定权限,然后给用户划分角色. 从企业的角度来说,基本上是按照角色来划分职能.比如,CEO ...
- 权限系统(RBAC)的数据模型设计
前言: RBAC是Role-Based Access Control的缩写, 它几乎成为权限系统的数据模型的选择标配. 之前写个两篇关于权限系统的文章, 主要涉及如何在应用中实现权限控制, 对权限系统 ...
- 基于SSM的租赁管理系统0.1_20161225_项目需求
基于SSM的汽车租赁系统项目计划书 1.产品定位 本系统供提供租赁服务的企业内部使用,供企业员工进行线下操作. 2.需求分析 2.1 能为工作人员提供员工信息的管理功能,具有RBAC基于角色的权限管理 ...
随机推荐
- windows 命令端口映射
显示映射列表netsh interface portproxy show all 将本地的1234端口的数据转发至192.168.x.x上的1234端口netsh interface portprox ...
- oracle blob 反序列化错误
代码的目的是先将一个配置类JobConfig序列化存进Oracle中的Blob中,然后查的时候反序列化出来. 先看一下控制台报错 ### Cause: com.audaque.lib.core.exc ...
- vue-slot的使用
父组件在子组件内套的内容,是不显示的:vue有一套内容分发的的API,<slot>作为内容分发的出口,假如父组件需要在子组件内放一些DOM,那么这些DOM是显示.不显示.在哪个地方显示.如 ...
- 05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?
通过前两节对平均负载和 CPU 上下文切换的学习,我相信你对 CPU 的性能已经有了初步了解.不过我还是想问一下,在学这个专栏前,你最常用什么指标来描述系统的 CPU 性能呢?我想你的答案,可能不是平 ...
- [eclipse中使用Git插件] 008 - git操作pull、merge、stash、commit
写在前面: 看标题其实还有001-007之类,本来准备写详细的类似教程一样的东东,但是懒了且时间有限(以后或许会补吧),所以跳到008,录下主要的操作. 所以本随笔的重点就是[pull+merge+s ...
- memset 初始化数组 & 实现原理
初始化数组可不必使用n重for循环. 原理 memset具有初始化数组的功能,能够初始化数组中的每一个值. 它是将数组中的每一个数的二进制的每一个字节初始化的. 比如初始化int类型的a数组:mems ...
- 56-python基础-python3-集合-新建集合
集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键. 集合支持用in和not in操作符检查成员. 由len()内建函数得到集合的基数(大小). 用 for 循环迭代集合的成员. 但是因为集 ...
- 如何做PPT
如何做出更漂亮的PPT? 1.文字对齐,PPT字体最好使用微软雅黑,文档最好使用宋体 2.总分总的叙述形式 3.颜色最好使用冷色系,蓝色.灰色.灰蓝色等等 4.每段话中的重点内容标出特殊颜色 5.可使 ...
- ASP.NET MVC5 +Abp 模板(Startup Templates)
官网:https://aspnetboilerplate.com/Templates 系统登陆初始账号:admin 密码:123qwe 调试错误: 1.在多语句事务内不允许使用 CREATE DATA ...
- C#设计模式:装饰者模式(Decorator Pattern)
一,装饰者模式(Decorator Pattern):装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能. 二,在以上代码中我们是中国人是根本行为,我们给中国人装饰我会说英语 ...