五表权限管理

思路整理

        我们在做后台管理时可能要设计到一个权限问题,那就是什么用户拥有哪些操作功能,而我们管理员可以给用户赋予权限。就像一些电影平台一样,我们想要下载一些电影,就需要开通会员,这个开通会员的操作就好比是给该用户赋予下载电影的权限,而我目前所了解的一个权限管理,可以使我们在权限管理方面可以更深的了解一下




上面是我自己做的表关联


1、首先这是一个权限管理,我使用是SSM框架和easyui,如果我想给用户赋予权限,可能需要很多,所有我将权限赋予一个角色,当我想让一个用户有一些权限的时候只需要给用户赋予一个角色就可以享用该角色的权限。

所以我的用户和角色进行关联,角色和权限进行关联,这样我就可以给用户很简单的赋予权限了,而我的权限表中就类似一个二级联动的样式,通过pid与id进行关联,达到二级联动,而我的前端是要以一个ztree的形式展示出一个菜单栏


这样就是我想要达到的一个最终ztree的效果

2、然后我想要做到登录不同的用户,菜单栏中会有不同的权限,而为了保证用户的安全性,我用到了md5加密的方式,给密码进行了加密,用户登录成功后我将用户的一些信息存放在session缓存中,而我在登录的时候进行一个查询,通过session缓存中的id查询关联表来判断该用户的角色,这样就可以通过一个用户id来查询到该角色就可以显示该用户的权限菜单,而且我们知道在添加角色的时候我们需要对该用户的角色进行删除后再添加的操作,这样就可以达到我们的用户赋予权限的操作了


3、在给角色赋予权限的时候我也使用了tree来进行更好的操作,便于我们去管理权限,首先是个树的回显,点击角色时需要进行回显操作,在回显的时候我的代码如下

var roleid="";
//编辑权限
function bjqx(id){
		roleid=id;
		//给弹窗自定义的表头
		$("#rightdlg").dialog('open').dialog('setTitle','编辑权限');
		$("#rightree").tree({
			url:'${ctx}/menu/getAllList.action',//与后台响应的地址
		    textFiled:'menu_name',//后台传来的name
		    parentField:'pid',//自关联ID更据那个属性来判断父子,tree会自动判断
		    checkbox:true,//是否显示复选框
		    lines:'true',//是否显示虚线
		    onLoadSuccess : function(){//加载成功后的回调
		    	$.ajax({//ajax向后台请求
			   		 type: "POST",
			   		 url : "${ctx}/role/getRoleMenu.action",//与后台响应的地址
			   		 data:{
			   			 "roleid" : id//选中角色的id
			   		 },
			   		 success: function(data){//成功后的回调
			   			if(data!=""&&data!=null){//判断是否后台传过来值
			   				var arr = data.split(",");//拆分,应为我后台使用了distance函数,对查出的树进行了拼接
				   			for(var i=0;i<arr.length;i++){
				   				var node = $('#rightree').tree('find',arr[i]);//找到树
				   				if($('#rightree').tree('isLeaf',node.target)){//判断指定的节点是否是叶子节点,target参数是一个节点DOM对象
			   						$('#rightree').tree('check',node.target);//选中
			   					}
				   			}
			   			}else{
			   				$.messager.alert('提示', '该角色没有权限!!!');//没有权限提醒
			   			}
			   		 }
			   	}); 
		    }
		});
		$("#role_datagrid").datagrid("uncheckAll");//结束操作后清除弹窗
		
}

以上是我的回显,那么还有一个提交,代码奉上

function saveright(){
	var nodes = $('#rightree').tree('getChecked', ['checked','indeterminate']);//获取选中的值
	var menuids="";
	for(var i=0;i<nodes.length;i++){
		if(i==0){
			menuids=nodes[i].id;//如果只有一条,不拼接
		} else{
			menuids += ","+nodes[i].id;//拼接
		}
	}
	
	$.post(
		"${ctx}/role/roletree.action",		
		{menuids:menuids,roleid:roleid},
		function(data){
			if(data.success){
				$('#rightdlg').dialog('close'); 
				$.messager.alert('提示', '操作成功!');
			}else{
				$.messager.alert('提示','操作失败!!!','error');
			}
			
		}
	);
	
}

当完成操作后再后台的操作与给用户赋予角色一样的先删除后批量增加

而我使用了另一种方式来进行操作的


@Override
	public void roletree(String menuids, String roleid) {
		// TODO Auto-generated method stub
		roleDao.deletetree(roleid);//删除操作
		if(Tools.notEmpty(menuids)){//调用的工具类判断menuids是否为空
			String[] menuid = menuids.split(",");//拆分
			List<Map<String,String>> list = new ArrayList<Map<String,String>>();//new一个arraylist
			for (int i = 0; i < menuid.length; i++) {
				Map<String,String> map= new HashMap<String,String>();//再new一个hashMap
				map.put("id", UUID.randomUUID().toString());
				map.put("menu_id", menuid[i]);
				map.put("role_id", roleid);
				list.add(map);
			}
			roleDao.inserttree(list);
		}
		
	}

结合二者的优势来进行添加

最后sql奉上    



以上便是我对五表权限的认识,可能再代码中还有不足,希望各位朋友们可以给出指点,谢谢

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值