实现角色管理,角色与用户之间多对多分配
代码下载:git clone –b day6 https://github.com/qixiangchen/gufang_fisys.git
角色接口IRole
package com.gf.statusflow;
public interface IRole
{
public void setId(String id);
public String getId();
public void setName(String name);
public String getName();
public void setDescription(String description);
public String getDescription();
public void setFlag(String flag);
public String getFlag();
}
角色实现类DefaultRole
package com.gf.statusflow.def;
import com.gf.statusflow.IOrg;
import com.gf.statusflow.IRole;
public class DefaultRole implements IRole{
private String id = null;
private String name = null;
private String description = null;
private String flag = "gf";
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
}
用户角色关联接口
package com.gf.statusflow;
import java.util.Date;
import java.util.List;
public interface IOrgUserRole extends java.io.Serializable
{
public String USER = "user";
public String ORG = "org";
public String getId();
public void setId(String id);
public String getEntityId();
public void setEntityId(String entityId);
public String getEntityType();
public void setEntityType(String entityType);//entityType="user",entityType="org"
public String getRoleId();
public void setRoleId(String roleId);
public String getFlag();
public void setFlag(String flag);
public String getEntityName();
public void setEntityName(String entityName);
public String getRoleName();
public void setRoleName(String roleName);
}
用户角色实体类
package com.gf.statusflow.def;
import com.gf.statusflow.IOrg;
import com.gf.statusflow.IOrgUserRole;
public class DefaultOrgUserRole implements IOrgUserRole{
private String id = null;
private String entityId = null;
private String entityType = USER;
private String roleId = null;
private String flag = null;
//冗余字段
private String entityName = null;
private String roleName = null;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEntityId() {
return entityId;
}
public void setEntityId(String entityId) {
this.entityId = entityId;
}
public String getEntityType() {
return entityType;
}
public void setEntityType(String entityType) {
this.entityType = entityType;
}
public String getRoleId() {
return roleId;
}
public void setRoleId(String roleId) {
this.roleId = roleId;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public String getEntityName() {
return entityName;
}
public void setEntityName(String entityName) {
this.entityName = entityName;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
SQL
create table gf_role(id varchar(32),
name varchar(100),
description varchar(200),
flag varchar(50));
create table gf_orguserrole(id varchar(32),
entityid varchar(32),
entitytype varchar(10),
roleid varchar(32),
flag varchar(50));
Mapper层设计
<!-- 角色相关SQL -->
<insert id="saveRole" parameterType="com.gf.statusflow.def.DefaultRole">
insert into gf_role(id,name,description,flag)
values(#{id},#{name},#{description},#{flag})
</insert>
<update id="updateRole" parameterType="com.gf.statusflow.def.DefaultRole">
update gf_role set name=#{name},description=#{description},flag=#{flag}
where id=#{id}
</update>
<delete id="deleteRole">
delete from gf_role where id=#{id}
</delete>
<select id="getAllRole" resultType="com.gf.statusflow.def.DefaultRole">
select * from gf_role
</select>
<select id="getRoleById" resultType="com.gf.statusflow.def.DefaultRole">
select * from gf_role where id=#{id}
</select>
<!-- 部门与角色,用户与角色相关SQL -->
<insert id="saveOrgUserRole" parameterType="com.gf.statusflow.def.DefaultOrgUserRole">
insert into gf_orguserrole(id,entityid,entitytype,roleid,flag)
values(#{id},#{entityId},#{entityType},#{roleId},#{flag})
</insert>
<delete id="deleteOrgUserRoleByEntityId">
delete from gf_orguserrole where entityid=#{entityId}
</delete>
<select id="getOrgUserRoleByEntityId" resultType="com.gf.statusflow.def.DefaultOrgUserRole">
select * from gf_orguserrole where entityid=#{entityId}
</select>
组织机构接口IOrgModel修改
/**
* 角色相关Mybatis方法
*/
public void saveRole(DefaultRole role);
public void updateRole(DefaultRole role);
public void deleteRole(String id);
public List<DefaultRole> getAllRole();
public DefaultRole getRoleById(String id);
/**
* 部门与角色,用户与角色相关SQ
*/
public void saveOrgUserRole(DefaultOrgUserRole our);
public void deleteOrgUserRoleByEntityId(String entityId);
public List<DefaultOrgUserRole> getOrgUserRoleByEntityId(String entityId);
组织机构实现类DefaultOrgModel
/**
* 角色相关Mybatis方法
*/
@Override
public void saveRole(DefaultRole role) {
try
{
mapper.saveRole(role);
}
catch(Exception e)
{
log.error(e.getMessage());
}
}
@Override
public void updateRole(DefaultRole role) {
try
{
mapper.updateRole(role);
}
catch(Exception e)
{
log.error(e.getMessage());
}
}
@Override
public void deleteRole(String id) {
try
{
mapper.deleteRole(id);
}
catch(Exception e)
{
log.error(e.getMessage());
}
}
@Override
public List<DefaultRole> getAllRole() {
try
{
return mapper.getAllRole();
}
catch(Exception e)
{
log.error(e.getMessage());
}
return null;
}
@Override
public DefaultRole getRoleById(String id) {
try
{
return mapper.getRoleById(id);
}
catch(Exception e)
{
log.error(e.getMessage());
}
return null;
}
/**
* 部门与角色,用户与角色相关SQ
*/
@Override
public void saveOrgUserRole(DefaultOrgUserRole our) {
try
{
mapper.saveOrgUserRole(our);
}
catch(Exception e)
{
log.error(e.getMessage());
}
}
@Override
public void deleteOrgUserRoleByEntityId(String entityId) {
try
{
mapper.deleteOrgUserRoleByEntityId(entityId);
}
catch(Exception e)
{
log.error(e.getMessage());
}
}
@Override
public List<DefaultOrgUserRole> getOrgUserRoleByEntityId(String entityId) {
try
{
return mapper.getOrgUserRoleByEntityId(entityId);
}
catch(Exception e)
{
log.error(e.getMessage());
}
return null;
}
Controller层设计
@RequestMapping("/userquery")
@ResponseBody
public Map userquery(Integer page,Integer rows,String qname)
{
if(page == null)
page = 1;
if(rows == null)
rows = 10;
Map m = new HashMap();
PageHelper.startPage(page,rows);
List<DefaultUser> list = orgmodel.findUserByName(qname);
PageInfo pi = new PageInfo(list);
Long total = pi.getTotal();
List<DefaultUser> users = pi.getList();
m.put("total", total);
m.put("rows", users);
return m;
}
@RequestMapping("/role")
public String role()
{
return "/orgmodel/role";
}
@RequestMapping("/roleload")
@ResponseBody
public Map roleload(Integer page,Integer rows)
{
if(page == null)
page = 1;
if(rows == null)
rows = 10;
Map m = new HashMap();
PageHelper.startPage(page,rows);
List<DefaultRole> list = orgmodel.getAllRole();
PageInfo pi = new PageInfo(list);
Long total = pi.getTotal();
List<DefaultRole> users = pi.getList();
m.put("total", total);
m.put("rows", users);
return m;
}
@RequestMapping("/rolesave")
@ResponseBody
public Boolean rolesave(DefaultRole role)
{
log.debug("rolesave role="+role);
String id = role.getId();
if("".equals(Util.fmtStr(id)))
{
id = UUID.create("role");
role.setId(id);
orgmodel.saveRole(role);
}
else
{
orgmodel.updateRole(role);
}
return true;
}
@RequestMapping("/roledelete")
@ResponseBody
public Boolean roledelete(String[] id)
{
log.debug("roledelete id="+id);
if(id != null)
{
for(String id2:id)
orgmodel.deleteRole(id2);
}
return true;
}
@RequestMapping("/roleuser")
public String orguserrole()
{
return "/orgmodel/orguserrole";
}
@RequestMapping("/roleroot")
@ResponseBody
public List<TreeNode> roleroot()
{
List<TreeNode> rtn = new ArrayList<TreeNode>();
TreeNode root = new TreeNode();
root.setId("root");
root.setText("角色树");
rtn.add(root);
List<DefaultRole> roles = orgmodel.getAllRole();
for(DefaultRole role:roles)
{
TreeNode tn = new TreeNode();
tn.setId(role.getId());
tn.setText(role.getName());
root.addChild(tn);
}
return rtn;
}
页面orguserrole.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String menu = (String)request.getAttribute("menu");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<script type="text/javascript" src="/easyui/jquery.min.js"></script>
<script type="text/javascript" src="/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="/easyui/easyui-lang-zh_CN.js"></script>
<link rel="stylesheet" href="/easyui/themes/default/easyui.css"/>
<link rel="stylesheet" href="/easyui/themes/icon.css"/>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>财务报销系统</title>
<script>
function reloadtree()
{
//$('#tree').tree('loadData',[{"id":"1","text":"Root","iconCls":null,"url":null,"state":"closed","attributes":{"type":"system","isload":"false","path":"/","parentId":null}}]);
$.get('/roleroot',function(data)
{
$('#tree').tree({
data: data
});
}
)
}
function queryuser()
{
var qname = $('#qname').val();
$('#userdg').datagrid({
url:'/userquery?qname='+qname
})
}
function saveroleuser()
{
var nodes = $('#tree').tree('getChecked');
var roleid = '';
for(var i=0;i<nodes.length;i++)
{
if('root' != nodes[i].id)
roleid = roleid + nodes[i].id + ',';
}
var users = $('#userdg').datagrid('getChecked');
var userid = '';
for(var i=0;i<users.length;i++)
userid = userid + users[i].id;
$.ajax({
url:'/roleassign?roleId='+roleid+"&userId="+userid,
success:function(data)
{
queryuser();
}
})
}
function openuser(index, row)
{
$('#win').window('open');
var userId = row.id;
$('#userroledg').datagrid({
url:'/userrolequery?userId='+userId
})
}
function deluserrole()
{
var objs = $('#userroledg').datagrid('getChecked');
var id = '';
for(i=0;i<objs.length;i++)
{
id = id + objs[i].id + ',';
userId = objs[i].userId;
}
$.ajax({
url:'/userroledel?id='+id,
success:function(data)
{
$('#userroledg').datagrid({
url:'/userrolequery?userId='+userId
})
}
})
}
$(document).ready(
function()
{
reloadtree();
$('#win').window('close');
$('#userdg').datagrid({
'onClickRow':openuser
})
}
);
</script>
</head>
<body class="easyui-layout">
<div data-options="region:'west',title:'角色树'" style="width:250px;">
<ul id="tree" class="easyui-tree" data-options="lines:true,checkbox:true,cascadeCheck:false">
</ul>
</div>
<div data-options="region:'center',title:'用户查询'" style="padding:5px;">
<table id="userdg" class="easyui-datagrid" style="width:100%;height:250px"
data-options="url:'/userquery',fitColumns:true,pagination:true,
pageSize:10,pageList:[10,50,100,200],toolbar:'#tb'">
<thead>
<tr>
<th data-options="field:'id',width:100,checkbox:true">ID</th>
<th data-options="field:'loginId',width:100">登录ID</th>
<th data-options="field:'name',width:100">姓名</th>
<th data-options="field:'mobile',width:100">手机</th>
<th data-options="field:'roleName',width:100">已分配角色</th>
</tr>
</thead>
</table>
<div id="tb">
<input class="easyui-textbox" type="text" id="qname" name="qname" data-options="width:250,label:'输入用户名称:'" />
<a id="btn" onclick="queryuser()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">查询</a>
<a id="btn" onclick="saveroleuser()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">保存</a>
</div>
<div id="win" class="easyui-window" title="用户角色授权窗口" style="width:600px;height:320px"
data-options="iconCls:'icon-save',modal:true">
<div class="easyui-layout" data-options="fit:true">
<table id="userroledg" class="easyui-datagrid" style="width:100%;height:250px"
data-options="url:'/userrolequery',fitColumns:true,pagination:true,
pageSize:10,pageList:[10,50,100,200]">
<thead>
<tr>
<th data-options="field:'id',width:100,checkbox:true">ID</th>
<th data-options="field:'name',width:100">姓名</th>
<th data-options="field:'userId',width:100">姓名</th>
<th data-options="field:'roleName',width:100">角色</th>
</tr>
</thead>
</table>
<a id="btn" onclick="deluserrole()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">删除</a>
<a id="btn" onclick="closeuserrole()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">关闭</a>
</div>
</div>
</div>
</body>
</html>
批量授权页面
管理员可以选择多个角色和多个用户,批量进行授权。
删除某用户已分配角色