// 为角色添加权限
@Override
@Transactional
public boolean permissionset(RoleVo roleVo) {//roleVo 中有roleid和menuids。
String menuIds = roleVo.getMenuIds();
// 先删除这个角色已存在的权限映射记录
RoleMenuRelExample roleMenuRelExample = new RoleMenuRelExample();
RoleMenuRelExample.Criteria criteria0 = roleMenuRelExample.createCriteria();
criteria0.andRoleIdEqualTo(roleVo.getRoleId());
roleMenuRelMapper.deleteByExample(roleMenuRelExample);
// 插入新的角色权限映射关系
String[] menuIdArr = menuIds.split(",");
boolean isSuccess = true;
for (int i = 0; i < menuIdArr.length; i++) {
String menuId = menuIdArr[i];
// 1111111111111111111111111111111111111111111111
// 保存:当前选中的menu A
roleMenuRelExample.clear();
RoleMenuRelExample.Criteria criteria = roleMenuRelExample.createCriteria();
criteria.andRoleIdEqualTo(roleVo.getRoleId());
criteria.andMenuIdEqualTo(Integer.valueOf(menuId));
List<RoleMenuRel> roleMenuRels = roleMenuRelMapper.selectByExample(roleMenuRelExample);
if (roleMenuRels == null || roleMenuRels.size() == 0) {
RoleMenuRel rel = new RoleMenuRel();
rel.setRoleId(roleVo.getRoleId());
rel.setMenuId(Integer.valueOf(menuId));
int count = roleMenuRelMapper.insert(rel);
if (count == 0) {
isSuccess = false;
}
}
// 222222222222222222222222222222222
// 如果A 的父id != 0 ,保存B
// 由于前段 jstree 控件的 bug, 可能导致父级菜单 id 没上传的情况,需要判断
// 只对二级菜单判断,判断其父级菜单映射关系是否入库,否则入库
// 拿到父级菜单id
Menu menu = menuMapper.selectByPrimaryKey(Integer.valueOf(menuId));
if (menu.getParentId() != 0) { // 非顶级菜单,要保存上级菜单
roleMenuRelExample.clear();
RoleMenuRelExample.Criteria criteria2 = roleMenuRelExample.createCriteria();
criteria2.andRoleIdEqualTo(roleVo.getRoleId());
criteria2.andMenuIdEqualTo(menu.getParentId());
List<RoleMenuRel> list = roleMenuRelMapper.selectByExample(roleMenuRelExample);
if (list == null || list.size() == 0) { // 子集菜单的父菜单id不存在库中
RoleMenuRel rel = new RoleMenuRel();
rel.setRoleId(roleVo.getRoleId());
rel.setMenuId(menu.getParentId());
int count = roleMenuRelMapper.insert(rel);
if (count == 0) {
isSuccess = false;
}
}
// 3333333333333333333333333333333
// menu2是选中的上一层菜单
Menu menu2 = menuMapper.selectByPrimaryKey(Integer.valueOf(menu.getParentId()));
if (menu2.getParentId() != 0) { // 非顶级菜单
roleMenuRelExample.clear();
RoleMenuRelExample.Criteria criteria3 = roleMenuRelExample.createCriteria();
criteria3.andRoleIdEqualTo(roleVo.getRoleId());
criteria3.andMenuIdEqualTo(menu2.getParentId());
List<RoleMenuRel> list2 = roleMenuRelMapper.selectByExample(roleMenuRelExample);
if (list2 == null || list2.size() == 0) { // 子集菜单的父菜单id不存在库中
RoleMenuRel rel = new RoleMenuRel();
rel.setRoleId(roleVo.getRoleId());
rel.setMenuId(menu2.getParentId());
int count = roleMenuRelMapper.insert(rel);
if (count == 0) {
isSuccess = false;
}
}
// 44444444444444444444444444444444
// menu3是选中的上上一层菜单
Menu menu3 = menuMapper.selectByPrimaryKey(Integer.valueOf(menu2.getParentId()));
if (menu3.getParentId() != 0) { // 非顶级菜单
roleMenuRelExample.clear();
RoleMenuRelExample.Criteria criteria4 = roleMenuRelExample.createCriteria();
criteria4.andRoleIdEqualTo(roleVo.getRoleId());
criteria4.andMenuIdEqualTo(menu3.getParentId());
List<RoleMenuRel> list3 = roleMenuRelMapper.selectByExample(roleMenuRelExample);
if (list3 == null || list3.size() == 0) { // 子集菜单的父菜单id不存在库中
RoleMenuRel rel = new RoleMenuRel();
rel.setRoleId(roleVo.getRoleId());
rel.setMenuId(menu3.getParentId());
int count = roleMenuRelMapper.insert(rel);
if (count == 0) {
isSuccess = false;
}
}
}
}
}
// 改造处end
}
return isSuccess;
}
以上是为角色添加权限。
引用处:https://blog.csdn.net/zhaoyaxiansheng/article/details/88222697
以下代码为 查询所有权限菜单,用于显示到jstree。
package com.dewxin.customer.center.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dewxin.customer.center.common.pojo.JsTreeNode;
import com.dewxin.customer.center.common.pojo.JsTreeNodeState;
import com.dewxin.customer.center.dao.MenuMapper;
import com.dewxin.customer.center.dao.RoleMenuRelMapper;
import com.dewxin.customer.center.pojo.*;
import com.dewxin.customer.center.service.MenuService;
import java.util.ArrayList;
import java.util.List;
@Service
public class MenuServiceImpl implements MenuService {
@Autowired
private MenuMapper menuMapper;
@Autowired
private RoleMenuRelMapper roleMenuRelMapper;
/**
* 根据 parentId 返回 jstree 格式数据--系统
*四层菜单
* @return
*/
@Override
public List<JsTreeNode> findPermissionsetByRoleId(int roleId) {
MenuExample example = new MenuExample();
MenuExample.Criteria criteria = example.createCriteria();
criteria.andParentIdEqualTo(0);
List<Menu> list = menuMapper.selectByExample(example);
List<JsTreeNode> nodes = new ArrayList<JsTreeNode>();
for (Menu menu : list) {
JsTreeNode node = new JsTreeNode();
node.setId(menu.getMenuId());
node.setText(menu.getName());
// 判断是否有子节点
example.clear();
MenuExample.Criteria criteria2 = example.createCriteria();
criteria2.andParentIdEqualTo(menu.getMenuId());
List<Menu> subList = menuMapper.selectByExample(example);
List<JsTreeNode> nodes2 = new ArrayList<JsTreeNode>();
for (Menu menu2 : subList) {
JsTreeNode node2 = new JsTreeNode();
node2.setId(menu2.getMenuId());
node2.setText(menu2.getName());
// 第三层
example.clear();
MenuExample.Criteria criteria3 = example.createCriteria();
criteria3.andParentIdEqualTo(menu2.getMenuId());
List<Menu> list3 = menuMapper.selectByExample(example);
List<JsTreeNode> nodes3 = new ArrayList<JsTreeNode>();
for (Menu menu3 : list3) {
JsTreeNode node3 = new JsTreeNode();
node3.setId(menu3.getMenuId());
node3.setText(menu3.getName());
// 第四层start
example.clear();
MenuExample.Criteria criteria6 = example.createCriteria();
criteria6.andParentIdEqualTo(menu3.getMenuId());
List<Menu> list4 = menuMapper.selectByExample(example);
List<JsTreeNode> nodes4 = new ArrayList<JsTreeNode>();
for (Menu menu4 : list4) {
JsTreeNode node4 = new JsTreeNode();
node4.setId(menu4.getMenuId());
node4.setText(menu4.getName());
// 回显是否被选中
RoleMenuRelExample roleMenuRelExample = new RoleMenuRelExample();
RoleMenuRelExample.Criteria criteria7 = roleMenuRelExample.createCriteria();
criteria7.andRoleIdEqualTo(roleId);
criteria7.andMenuIdEqualTo(menu4.getMenuId());
List<RoleMenuRel> roleMenuRels4 = roleMenuRelMapper.selectByExample(roleMenuRelExample);
JsTreeNodeState state4 = new JsTreeNodeState();
if (roleMenuRels4 != null && roleMenuRels4.size() > 0) {
state4.setSelected(true);
} else {
state4.setSelected(false);
}
node4.setState(state4);
nodes4.add(node4);
}
node3.setChildren(nodes4);
// 第四层end
// 回显是否被选中
RoleMenuRelExample roleMenuRelExample = new RoleMenuRelExample();
RoleMenuRelExample.Criteria criteria4 = roleMenuRelExample.createCriteria();
criteria4.andRoleIdEqualTo(roleId);
criteria4.andMenuIdEqualTo(menu3.getMenuId());
List<RoleMenuRel> roleMenuRels3 = roleMenuRelMapper.selectByExample(roleMenuRelExample);
JsTreeNodeState state3 = new JsTreeNodeState();
if (roleMenuRels3 != null && roleMenuRels3.size() > 0) {
state3.setSelected(true);
} else {
state3.setSelected(false);
}
node3.setState(state3);
nodes3.add(node3);
}
node2.setChildren(nodes3);
// 第三层end
// 回显是否被选中
RoleMenuRelExample roleMenuRelExample2 = new RoleMenuRelExample();
RoleMenuRelExample.Criteria criteria5 = roleMenuRelExample2.createCriteria();
criteria5.andRoleIdEqualTo(roleId);
criteria5.andMenuIdEqualTo(menu2.getMenuId());
List<RoleMenuRel> roleMenuRels2 = roleMenuRelMapper.selectByExample(roleMenuRelExample2);
JsTreeNodeState state2 = new JsTreeNodeState();
if (roleMenuRels2 != null && roleMenuRels2.size() > 0) {
state2.setSelected(true);
} else {
state2.setSelected(false);
}
node2.setState(state2);
nodes2.add(node2);
}
node.setChildren(nodes2);
nodes.add(node);
}
// 注释这部分用于两层菜单
// for (Menu menu : list) {
// JsTreeNode node = new JsTreeNode();
// node.setId(menu.getMenuId());
// node.setText(menu.getName());
//
RoleMenuRelExample.Criteria criteria1 = roleMenuRelExample.createCriteria();
criteria1.andRoleIdEqualTo(roleId);
criteria1.andMenuIdEqualTo(menu.getMenuId());
List<RoleMenuRel> roleMenuRels = roleMenuRelMapper.selectByExample(roleMenuRelExample);
JsTreeNodeState state = new JsTreeNodeState();
if (roleMenuRels != null && roleMenuRels.size() > 0) {
state.setSelected(true);
} else {
state.setSelected(false);
}
node.setState(state);
//
// // 判断是否有子节点
// example.clear();
// MenuExample.Criteria criteria2 = example.createCriteria();
// criteria2.andParentIdEqualTo(menu.getMenuId());
// List<Menu> subList = menuMapper.selectByExample(example);
//
// List<JsTreeNode> nodes2 = new ArrayList<JsTreeNode>();
// for (Menu menu2 : subList) {
// JsTreeNode node2 = new JsTreeNode();
// node2.setId(menu2.getMenuId());
// node2.setText(menu2.getName());
//
// // 回显是否被选中
// RoleMenuRelExample roleMenuRelExample = new RoleMenuRelExample();
// RoleMenuRelExample.Criteria criteria3 = roleMenuRelExample.createCriteria();
// criteria3.andRoleIdEqualTo(roleId);
// criteria3.andMenuIdEqualTo(menu2.getMenuId());
//
// List<RoleMenuRel> roleMenuRels2 = roleMenuRelMapper.selectByExample(roleMenuRelExample);
//
// JsTreeNodeState state2 = new JsTreeNodeState();
// if (roleMenuRels2 != null && roleMenuRels2.size() > 0) {
// state2.setSelected(true);
// } else {
// state2.setSelected(false);
// }
// node2.setState(state2);
//
// nodes2.add(node2);
// }
// node.setChildren(nodes2);
//
// nodes.add(node);
// }
return nodes;
}
}
js部分:
<div id="container" class="margin-bottom-20px"></div>
<script type="text/javascript">
$(function() {
// 清空实例,jstree不会重新生成
// $('#container').data('jstree', false).empty();
var roleId = $('#roleId').val();
$('#container').jstree({
'plugins': ["checkbox"],
'core' : {
'data' : {
'url' : '/sys/role/manage/permissionset/tree?roleId=' + roleId,
'data': function (node) {
return { 'id': node.id };
}
},
'themes': {
'name': 'proton',
'responsive': true
}
}
});
});
$('#submit').click(function(){
var menuIds = $('#container').jstree().get_checked(); //获取所有选中的节点ID
var roleId = $('#roleId').val();
// ajax 提交
$.ajax({
type: "POST",
async: true,
url: "<%=context%>/sys/role/manage/permissionset/update?roleId=" + roleId + "&menuIds=" + menuIds,
success: function (data) {
var jsonData = $.parseJSON(JSON.stringify(data));
var index = parent.layer.getFrameIndex(window.name);
if (jsonData.status == 0) {
parent.$("#layer_status").val(0);
} else {
parent.$("#layer_status").val(1);
}
parent.$("#layer_msg").val(jsonData.msg);
parent.layer.close(index);
}
});
});
</script>