1.前台jsp
<body>
<table id="role_tb">
</table>
<!-- 权限编辑窗口 -->
<div id="win" class="easyui-window" title="权限编辑"
style="width: 500px; height: 250px;" closed="true">
<form style="padding: 10px 20px 10px 40px;">
<ul id="tt" class="easyui-tree" url="../service/func/allTree" method="post"
checkbox="true">
</ul>
<div style="padding: 5px; text-align: center;">
<a href="#" class="easyui-linkbutton" icon="icon-ok" οnclick="confrimEdit();">确定</a> <a
href="#" class="easyui-linkbutton" icon="icon-cancel" οnclick="closeWin();">取消</a>
</div>
</form>
</div>
<!-- 角色用户编辑窗口 -->
<div id="roleUserWin" class="easyui-window" title="编辑管理员"
style="width: 500px; height: 250px;" closed="true">
<table id="roleUser_tb" toolbar="#addBar">
</table>
</div>
<!-- 角色用户编辑窗口工具栏 -->
<div id="addBar" style="padding: 3px">
<span>输入工号添加用户:</span> <input id="addUserId"
style="line-height: 26px; border: 1px solid #ccc">
<a href="#" class="easyui-linkbutton" plain="true" οnclick="addRoleUser()">点击添加至管理员</a>
</div>
<script type="text/JavaScript"
src="<%=request.getContextPath()%>/js/admin/role.js"></script>
</body>
2.前台js
/**
* 初始化界面
*/
var dataGrid;
var editRowId;
var rowEditor = undefined;
$(function() {
dataGrid = $("#role_tb")
.datagrid(
{
url : "../service/role/all",// 加载的URL
isField : "id",
method : "GET",
pagination : false,// 显示分页
fit : true,// 自动补全
fitColumns : true,
singleSelect : true,
iconCls : "icon-save",// 图标
columns : [ [ // 每个列具体内容
{
field : 'id',
title : '编号',
align : 'center',
width : 100,
},
{
field : 'roleName',
title : '角色名称',
align : 'center',
width : 100,
editor : 'text'
},
{
field : 'createTm',
title : '创建时间',
align : 'center',
width : 100
},
{
field : 'isDelete',
title : '是否禁用',
align : 'center',
width : 100,
editor : {
type : 'checkbox',
options : {
on : '1',
off : '0'
}
},
formatter : function(value, row, index) {
if (value == '0') {
return '<span style="color:green">正常</span>';
} else {
return '<span style="color:red">禁用</span>';
}
}
},{
field : 'action',
title : '编辑权限',
align : 'center',
width : 100,
formatter : function(value, row, index) {
return "<a href='#' class='easyui-linkbutton' οnclick='editRole("+row.id+")'>编辑权限</a>";
}
},{
field : 'roleUser',
title : '查看管理员',
align : 'center',
width : 100,
formatter : function(value, row, index) {
return "<a href='#' class='easyui-linkbutton' οnclick='editRoleUser("+row.id+")'>查看管理员</a>";
}
} ] ],
toolbar : [ // 工具条
{
text : "增加",
iconCls : "icon-add",
handler : function() {// 回调函数
if (rowEditor == undefined) {
dataGrid.datagrid('insertRow', {// 如果处于未被点击状态,在第一行开启编辑
index : 0,
row : {}
});
rowEditor = 0;
dataGrid.datagrid('beginEdit',
rowEditor);// 没有这行,即使开启了也不编辑
}
}
},
{
text : "删除",
iconCls : "icon-remove",
handler : function() {
var rows = dataGrid
.datagrid('getSelections');
if (rows.length <= 0) {
$.messager.alert('警告', '您没有选择',
'error');
} else if (rows.length > 1) {
$.messager.alert('警告', '不支持批量删除',
'error');
} else {
$.messager
.confirm(
'确定',
'您确定要删除吗',
function(t) {
if (t) {
$.ajax({
url : '../service/role/del',
method : 'POST',
data : rows[0],
dataType : 'json',
success : function(
r) {
if (r.code=="1") {
dataGrid
.datagrid('acceptChanges');
$.messager
.show({
msg : r.msg,
title : '成功'
});
editRow = undefined;
dataGrid
.datagrid('reload');
} else {
dataGrid
.datagrid(
'beginEdit',
editRow);
$.messager
.alert(
'错误',
r.msg,
'error');
}
dataGrid
.datagrid('unselectAll');
}
});
}
})
}
}
},
{
text : "修改",
iconCls : "icon-edit",
handler : function() {
var rows = dataGrid
.datagrid('getSelections');
if (rows.length == 1) {
if (rowEditor == undefined) {
var index = dataGrid.datagrid(
'getRowIndex', rows[0]);
rowEditor = index;
dataGrid
.datagrid('unselectAll');
dataGrid.datagrid('beginEdit',
index);
}
}
}
},
/*{
text : "查询",
iconCls : "icon-search",
handler : function() {
}
},*/
{
text : "保存",
iconCls : "icon-save",
handler : function() {
dataGrid.datagrid('endEdit', rowEditor);
rowEditor = undefined;
}
}, {
text : "取消编辑",
iconCls : "icon-redo",
handler : function() {
rowEditor = undefined;
dataGrid.datagrid('rejectChanges');
}
} ],
onAfterEdit : function(rowIndex, rowData, changes) {
var inserted = dataGrid.datagrid('getChanges',
'inserted');
var updated = dataGrid.datagrid('getChanges',
'updated');
if (inserted.length < 1 && updated.length < 1) {
editRow = undefined;
dataGrid.datagrid('unselectAll');
return;
}
var url = '';
if (inserted.length > 0) {
url = '../service/role/add';
}
if (updated.length > 0) {
url = '../service/role/update';
}
$
.ajax({
url : url,
method : "POST",
data : rowData,
dataType : 'json',
success : function(r) {
if (r.code=="1") {
dataGrid
.datagrid('acceptChanges');
$.messager.show({
msg : r.msg,
title : '成功'
});
editRow = undefined;
dataGrid.datagrid('reload');
} else {
/* datagrid.datagrid('rejectChanges'); */
dataGrid.datagrid('beginEdit',
editRow);
$.messager.alert('错误', r.msg,
'error');
}
dataGrid.datagrid('unselectAll');
}
});
},
onDblClickCell : function(rowIndex, field, value) {
if (rowEditor == undefined) {
dataGrid.datagrid('beginEdit', rowIndex);
rowEditor = rowIndex;
}
}
});
});
function editRole(id){
editRowId = id;
//1.取消所有选择
//var root = $('#tt').tree('getRoot');
//$("#tt").tree('uncheck',root.target);
//2.加载权限,动态选择
var url = '../service/func/roleTree?roleId='+id;
$.ajax({
cache : true,
type : "POST",
url : url,
async : false,
success : function(data) {
data = JSON.parse(data);
$(data).each(function(i, obj){
var children = obj.children;
$(children).each(function(j,c_obj){
var cc = $("#tt").tree('find',c_obj.id);
if(cc){
$("#tt").tree('check',cc.target);
}
});
});
}
});
$("#win").window('open');
}
//获取选中节点和父节点
function getChecked(){
var nodesParent = $('#tt').tree('getChecked','indeterminate');
var nodes = $('#tt').tree('getChecked');
var s = '';
for (var i = 0; i < nodesParent.length; i++) {
if (s != '')
s += ',';
s += nodesParent[i].id;
}
for (var i = 0; i < nodes.length; i++) {
if (s != '')
s += ',';
s += nodes[i].id;
}
return s;
}
//提交修改
function confrimEdit(){
var funIds = getChecked();
var url = '../service/role/editFunc';
var data = {
"roleId" :editRowId,
"funcIds":funIds
};
$.ajax({
cache : true,
type : "POST",
url : url,
data: data,
async : true,
success : function(data) {
if (data == "1") {
$.messager.show({
msg : "操作成功",
title : '成功'
});
closeWin();
}else{
$.messager
.alert(
'错误',
"操作失败",
'error');
}
}
});
}
//关闭窗口
function closeWin(){
$('#tt').tree('reload');
$("#win").window('close');
}
//打开编辑管理员窗口
function editRoleUser(roleId){
editRowId = roleId;
var roleUserGrid = $("#roleUser_tb").datagrid(
{
url : "../service/role/getUsers?roleId="+roleId,// 加载的URL
isField : "user_id",
method : "POST",
pagination : false,// 显示分页
fit : true,// 自动补全
fitColumns : true,
singleSelect : true,
iconCls : "icon-save",// 图标
columns : [ [ // 每个列具体内容
{
field : 'user_id',
title : '用户编号',
align : 'center',
width : 100,
},{
field : 'userName',
title : '姓名',
align : 'center',
width : 100,
},{
field : 'empNo',
title : '工号',
align : 'center',
width : 100,
}
]]
});
$("#roleUserWin").window('open');
}
//输入工号添加用户至管理员
function addRoleUser(){
var empNo = $("#addUserId").val();
var url = '../service/role/addRoleUser';
var data = {
"roleId" :editRowId,
"empNo":empNo
};
$.ajax({
type : "POST",
url : url,
data: data,
dataType:'json',
success : function(data) {
if (data.flg == "1") {
$.messager.show({
msg : "操作成功",
title : '成功'
});
$("#roleUser_tb").datagrid('reload');
}else{
$.messager
.alert(
'错误',
data.msg,
'error');
}
}
});
}
3.后台controller
/**
*
*/
package com.sf.fys.controller.role;
import Java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.sf.fys.config.LogAppender;
import com.sf.fys.configs.Message;
import com.sf.fys.controller.BaseController;
import com.sf.fys.data.Res;
import com.sf.fys.model.Role;
import com.sf.fys.model.RoleUser;
import com.sf.fys.model.User;
import com.sf.fys.model.UserInfo;
import com.sf.fys.result.ResultResponse;
import com.sf.fys.result.ReturnCode;
import com.sf.fys.result.StringResult;
import com.sf.fys.service.role.RoleService;
import com.sf.fys.service.user.UserService;
/**
* 角色权限管理
* @author sfit0512
*
*/
@RestController
public class RoleController extends BaseController
{
Logger log = Logger.getLogger(LogAppender.ADMIN);
@Autowired
private RoleService roleService;
@Autowired
private UserService userService;
/**
* 查询所有角色
* @return
*/
@RequestMapping(value = "/role/all", method = RequestMethod.GET)
public List<Role> getRoles()
{
List<Role> list = new ArrayList<Role>();
list = roleService.getRoles();
return list;
}
/**
* 添加角色
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/role/add", method = RequestMethod.POST)
@ResponseBody
public Res addRole(HttpServletRequest request, HttpServletResponse response)
throws Exception
{
String roleName = request.getParameter("roleName");
String isDelete = request.getParameter("isDelete");
Role role = new Role(roleName, isDelete.charAt(0));
int ret = roleService.addRole(role);
if (ret > 0)
{
return success();
}
return fail();
}
/**
* 修改角色
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/role/update", method = RequestMethod.POST)
@ResponseBody
public Res updateRole(HttpServletRequest request,
HttpServletResponse response) throws Exception
{
String roleName = request.getParameter("roleName");
String isDelete = request.getParameter("isDelete");
String id = request.getParameter("id");
Role role = new Role(roleName, isDelete.charAt(0));
role.setId(Long.parseLong(id));
int ret = roleService.updateRole(role);
if (ret > 0)
{
return success();
}
return fail();
}
/**
* 删除角色
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/role/del", method = RequestMethod.POST)
@ResponseBody
public Res deleteRole(HttpServletRequest request,
HttpServletResponse response) throws Exception
{
String id = request.getParameter("id");
int ret = roleService.delRole(Long.parseLong(id));
if (ret > 0)
{
return success();
}
return fail();
}
/**
* 编辑角色功能
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/role/editFunc", method = RequestMethod.POST)
@ResponseBody
public String editRoleFunction(HttpServletRequest request,
HttpServletResponse response) throws Exception
{
String roleId = request.getParameter("roleId");
String funcIds = request.getParameter("funcIds");
if (funcIds != null && !"".equals(funcIds))
{
int ret = roleService.updateRoleFunc(Long.parseLong(roleId),
funcIds);
if (ret > 0)
{
return "1";
}
}
return "0";
}
/**
* 根据角色编号查询该角色的所有用户
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/role/getUsers", method = RequestMethod.POST)
@ResponseBody
public List<User> getUsersByRoleId(HttpServletRequest request,
HttpServletResponse response) throws Exception
{
String roleId = getParameter(request, "roleId");
log.info("getUsersByRoleId|roleId=" + roleId);
List<User> list = roleService.getUsersByRoleId(Long.parseLong(roleId));
return list;
}
/**
* 给用户赋予角色
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/role/addRoleUser", method = RequestMethod.POST)
@ResponseBody
public ResultResponse addRoleUser(HttpServletRequest request,
HttpServletResponse response) throws Exception
{
String roleId = getParameter(request, "roleId");
String empNo = getParameter(request, "empNo");
log.info("addRoleUser|roleId=" + roleId + "|empNo=" + empNo);
List<UserInfo> list = userService.getUserByName("SF", empNo);
if(list==null || list.get(0).getUserId()<=0){
return new StringResult(ReturnCode.FAIL,Message.Error.USER_NOTE_EXITS, "");
}
long userId = list.get(0).getUserId();
RoleUser roleUser = new RoleUser();
roleUser.setRoleId(Long.parseLong(roleId));
roleUser.setUserId(userId);
int ret = roleService.addRoleUser(roleUser);
if (ret > 0)
{
return new StringResult(ReturnCode.SUCCESS,
ReturnCode.get(ReturnCode.SUCCESS), "");
}
else
{
return new StringResult(ReturnCode.FAIL,
ReturnCode.get(ReturnCode.FAIL), "");
}
}
/**
* 删除用户角色
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/role/delRoleUser", method = RequestMethod.POST)
@ResponseBody
public ResultResponse delRoleUser(HttpServletRequest request,
HttpServletResponse response) throws Exception
{
String roleId = getParameter(request, "roleId");
String userId = getParameter(request, "userId");
log.info("addRoleUser|roleId=" + roleId + "|userId=" + userId);
RoleUser roleUser = new RoleUser();
roleUser.setRoleId(Long.parseLong(roleId));
roleUser.setUserId(Long.parseLong(userId));
int ret = roleService.delRoleUser(roleUser);
if (ret > 0)
{
return new StringResult(ReturnCode.SUCCESS,
ReturnCode.get(ReturnCode.SUCCESS), "");
}
else
{
return new StringResult(ReturnCode.FAIL,
ReturnCode.get(ReturnCode.FAIL), "");
}
}
}
4.后台service
@Service
public class RoleService {
@Autowired
private RoleMapper mapper;
@Autowired
private RoleUserMapper roleUserMapper;
/**
* 查询所有角色
* @return
*/
public List<Role> getRoles(){
return mapper.getRoles();
}
/**
* 添加角色
* @param role
* @return
*/
public int addRole(Role role){
return mapper.addRole(role);
}
/**
* 修改角色
* @param role
* @return
*/
public int updateRole(Role role){
return mapper.updateRole(role);
}
/**
* 删除角色
* @return
*/
public int delRole(long id){
return mapper.delRole(id);
}
/**
* 修改角色下的权限功能
* @param roleId 角色编号
* @param funcs 功能编号
* @return
*/
public int updateRoleFunc(long roleId,String funcs){
//1.删除该角色所有功能
mapper.deleteRoleFunc(roleId);
//2.添加新功能
int ret = 0;
String[] funcList = funcs.split(",");
for(String s:funcList){
ret += mapper.addRoleFunc(roleId,Long.parseLong(s));
}
return ret;
}
/**
* 根据角色编号查询该角色的所有用户
* @param roleId
* @return
*/
public List<User> getUsersByRoleId(long roleId){
return roleUserMapper.getUsersByRoleId(roleId);
}
/**
* 给用户赋予角色
* @param roleUser
* @return
*/
public int addRoleUser(RoleUser roleUser){
return roleUserMapper.addRoleUser(roleUser);
}
/**
* 取消用户角色
* @param roleUser
* @return
*/
public int delRoleUser(RoleUser roleUser){
return roleUserMapper.deleteRoleUser(roleUser);
}
}
5.mapper xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sf.fys.mapper.role.RoleUserMapper">
<!-- 根据用户编号查询该用户拥有的角色 -->
<select id="getRoleByUserId" resultType="com.sf.fys.model.RoleUser">
select role_id as roleId,user_id as userId,create_tm
as createTm from
Role_User where user_id = #{userId,jdbcType=BIGINT}
</select>
<!-- 根据角色编号查询该角色下所有用户 -->
<select id="getUsersByRoleId" resultType="com.sf.fys.model.User">
select
u.user_id,u.user_name as userName,u.emp_no as empNo from Role_User ru
left join Users u on ru.user_id = u.user_id
where ru.role_id = #{roleId,jdbcType=BIGINT}
</select>
<!-- 给用户赋予角色 -->
<insert id="addRoleUser">
insert into Role_User(role_id,user_id,create_tm)
values(
#{roleId,jdbcType=BIGINT},
#{userId,jdbcType=BIGINT},
now()
)
</insert>
<!-- 删除用户角色 -->
<delete id="deleteRoleUser">
delete from Role_User where role_id =
#{roleId,jdbcType=BIGINT} and user_id = #{userId,jdbcType=BIGINT}
</delete>
</mapper>