一、权限配置
1. 思路
- 初始化所有权限,显示页面
- 共三级,若上级id为0并且下级权限数组长度为0,添加增删改查菜单
- 若存在上级并且下级权限数组长度为0,添加增删改查菜单
2. 代码
权限配置页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>权限分配</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="${pageContext.request.contextPath}/assets/css/jquery-ui-1.10.3.full.min.css" />
<link rel="stylesheet" href="${pageContext.request.contextPath}/core/css/tree.css"/>
<script src="${pageContext.request.contextPath}/core/js/jquery.min.js"></script>
<script src="${pageContext.request.contextPath}/assets/js/bootstrap.min.js"></script>
<script src="${pageContext.request.contextPath}/assets/js/ace.min.js"></script>
<script src="${pageContext.request.contextPath}/core/js/shCore.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/core/js/shBrushJScript.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/core/js/shBrushCss.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/core/js/jquery.tree.js" type="text/javascript"></script>
</head>
<body>
<!--header-->
<%@include file="../../include/header.jsp" %>
<div class="main-container" id="main-container">
<script type="text/javascript">
try{ace.settings.check('main-container' , 'fixed')}catch(e){}
</script>
<div class="main-container-inner">
<a class="menu-toggler" id="menu-toggler" href="#">
<span class="menu-text"></span>
</a>
<!--left menu-->
<%@include file="../../include/menu.jsp" %>
<!--content-->
<div class="main-content">
<div class="breadcrumbs" id="breadcrumbs">
<script type="text/javascript">
try{ace.settings.check('breadcrumbs' , 'fixed')}catch(e){}
</script>
<ul class="breadcrumb">
<li>
<i class="icon-home home-icon"></i>
<a href="/manage/main/home">首页</a>
</li>
<li class="active">控制台</li>
</ul><!-- .breadcrumb -->
</div>
<div class="page-content">
<div class="page-header">
<h1>
权限管理
<small>
<i class="icon-double-angle-right"></i>
权限分配
</small>
</h1>
</div><!-- /.page-header -->
<button class="btn btn-success icon-ok" id="save"> 保 存 </button>
<div class="space-4"></div>
<div class="row">
<div class="col-xs-12">
<!-- PAGE CONTENT BEGINS -->
<div class="row">
<div class="col-sm-6">
<div class="widget-box">
<div class="widget-header header-color-blue2">
<h4 class="lighter smaller">角色列表</h4>
</div>
<div class="widget-body">
<div class="widget-main padding-8">
<div>
<select class="form-control" id="roleId" name="roleId" multiple="multiple">
<c:forEach items="${roleVoList}" var="role" varStatus="roleStatus">
<option value="${role.id}">${role.roleName}</option>
</c:forEach>
</select>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="widget-box">
<div class="widget-header header-color-blue2">
<h4 class="lighter smaller">菜单列表</h4>
</div>
<div class="widget-body">
<div class="widget-main padding-8">
<div id="tree">
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
var $assets = "assets";//this will be used in fuelux.tree-sampledata.js
</script>
<!-- PAGE CONTENT ENDS -->
</div><!-- /.col -->
</div><!-- /.row -->
</div><!-- /.page-content -->
</div><!-- /.main-content -->
</div><!-- /.main-container-inner -->
<a href="#" id="btn-scroll-up" class="btn-scroll-up btn btn-sm btn-inverse">
<i class="icon-double-angle-up icon-only bigger-110"></i>
</a>
</div><!-- /.main-container -->
<!-- basic scripts -->
<!--[if !IE]> -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×
</button>
<h4 class="modal-title" id="myModalLabel">
信息提示 :
</h4>
</div>
<div class="modal-body">
<h3 id="info"></h3>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<script type="text/javascript">
jQuery(function($) {
//默认显示管理员角色
$("#roleId").val(1);
initTree(1);
//根据不同的角色编号显示对应菜单列表
$('#roleId').change(function(){
var roleid = $(this).children('option:selected').val();
initTree(roleid);
});
});
var show=false;
/**
* 初始化菜单树
* @param status
*/
function initTree(roleId) {
var tree = { showcheck: true};
$.ajax({
type: "POST",
url:"/manage/auth/getAllMenuList",
dataType:"json",
data:{
roleId:roleId
},
success: function(data) {
var len = data.obj.length;
if(data.res == 1){
var arr = [];
for(var i= 0;i< len; i++){
var data1 = data.obj[i];
var subarr = [];
for(var j=0;j< len;j++){
var data2 = data.obj[j];
var threearr = [];
for(var k=0;k<len;k++){
var data3 = data.obj[k];
if(data3.parentid == data2.id) {
var opStr=[];
opStr=opAuthStr(data3);
threearr.push({
"id" : "" + data3.id,
"text" : "" + data3.name+" | "+data3.id,
"value" : "" + data3.id,
"showcheck" : true,
complete : true,
"isexpand" : true,
"checkstate" : data3.checkstate,
"hasChildren": opStr
});
}
}
if(data2.parentid == data1.id) {
if(threearr.length==0){
threearr=opAuthStr(data2);
}
subarr.push({
"id" : "" + data2.id,
"text" : "" + data2.name+" | "+data2.id,
"value" : "" + data2.id,
"showcheck" : true,
complete : true,
"isexpand" : true,
"checkstate" : data2.checkstate,
"hasChildren" : true,
"ChildNodes": threearr
});
}
}
if(data1.parentid == 0){
if(threearr.length==0){
subarr=opAuthStr(data1);
}
arr.push( {
"id" : "" + data1.id,
"text" : "" + data1.name+" | "+data1.id,
"value" : "" + data1.id,
"showcheck" : true,
complete : true,
"isexpand" : true,
"checkstate" : data1.checkstate,
"hasChildren" : true,
"ChildNodes" : subarr
});
}
}
tree.data = arr ;
$("#tree").treeview(tree);
}
}
});
$("#save").click(function(e){
var sid = $("#tree").getCheckedNodes();
var roleId = $("#roleId").val();
if(show) return;
show=true;
$.ajax({
type: "POST",
url: "/manage/auth/saveAuth",
dataType: "json",
data: {
roleId: roleId +"",
menuIds: sid.join(",")
},
success: function(data) {
show=false;
if(data.res == 1){
$("#info").text("保存成功!");
$("#info").attr("class","text-success");
$('#myModal').modal('show');
}else{
$("#info").text("保存失败!");
$("#info").attr("class","text-danger");
$('#myModal').modal('show');
}
}
});
});
}
function opAuthStr(menuObj) {
var opStr=[];
opStr.push({
"id" : menuObj.id+"_"+1,
"text" : "添加",
"value" : menuObj.id+"_"+1,
"showcheck" : true,
complete : true,
"isexpand" : true,
"checkstate" : menuObj.isadd,
"hasChildren": false
});
opStr.push({
"id" : menuObj.id+"_"+2,
"text" : "修改",
"value" : menuObj.id+"_"+2,
"showcheck" : true,
complete : true,
"isexpand" : true,
"checkstate" : menuObj.isupdate,
"hasChildren": false
});
opStr.push({
"id" : menuObj.id+"_"+3,
"text" : "删除",
"value" : menuObj.id+"_"+3,
"showcheck" : true,
complete : true,
"isexpand" : true,
"checkstate" : menuObj.isdelete,
"hasChildren": false
});
opStr.push({
"id" : menuObj.id+"_"+4,
"text" : "查询",
"value" : menuObj.id+"_"+4,
"showcheck" : true,
complete : true,
"isexpand" : true,
"checkstate" : menuObj.isquery,
"hasChildren": false
});
return opStr;
}
</script>
</body>
</html>
二、权限配置好之后,页面加载
1. 思路
- 前台获取列表页面时,controller中获取权限列表,将数据写入model中前台获取列表页面时,controller中获取权限列表,将数据写入model中
- 前台jsp页面加载时判断是否有权限,若有权限显示,无权限,不显示
2. 代码
controller
/**
* 卡清单列表
* @param
* @param model
* @return
*/
@RequestMapping("cardList")
public String cardList(ToyCardVo toyCardVo, Model model){
SysDictionaryVo sysDictionaryVo = new SysDictionaryVo();
sysDictionaryVo.setName("提货卡类型");
List<SysDictionaryVo> typeList = sysDictionaryService.findByNameGetList(sysDictionaryVo);
model.addAttribute("typeList",typeList);
//菜单权限
model.addAttribute("auth", getAuthority(45L));//
return "/toy/card/cardList";
}
/**
* 获得当前用户菜单权限
* @param menuid 菜单id
* @return long
*/
public SysAuthorityVo getAuthority(Long menuid){
Long roleId=(Long)(getRequest().getSession().getAttribute("roleId"));
SysAuthorityVo sysAuthorityVo = new SysAuthorityVo();
sysAuthorityVo.setRoleId(roleId);
sysAuthorityVo.setMenuId(menuid);
sysAuthorityVo=sysAuthorityService.findById(sysAuthorityVo);
return sysAuthorityVo;
}
实体类
public class SysAuthority implements java.io.Serializable {
// Fields
private Long id;
private Long roleId;
private Long menuId;
private Short isadd;
private Short isupdate;
private Short isdelete;
private Short isquery;
Vo类
@Alias("SysAuthority")
public class SysAuthorityVo extends SysAuthority {
private String menuIds;
列表展现jsp方式一
var isdelete=${auth.isdelete};
if(isupdate==1){
if(data.isact==1 || data.isact==2){
html+= "<a class='green' href='/manage/card/toCardAdd?id="+data.id+"'>"+
"编辑"+
"</a>"
}
}
列表展现jsp方式二
<c:if test="${auth.isadd == 1}">
<button class="btn btn-success icon-plus" id="add"> 新增 </button>
</c:if>