完成给用户分配角色以及用户登陆关联菜单以及权限

lihaobo
luoyijiucheng 6 years ago
parent d46afa2a7e
commit 9cedd579f4

@ -92,7 +92,7 @@ public class CacheAspect {
@Around(value = POINTCUT_DEPT_UPDATE)
public Object cacheDeptUpdate(ProceedingJoinPoint joinPoint) throws Throwable {
//取出第一个参数
DeptVo deptVo = (DeptVo) joinPoint.getArgs()[0];
Dept deptVo = (Dept) joinPoint.getArgs()[0];
Boolean isSuccess = (Boolean) joinPoint.proceed();
if (isSuccess){
Dept dept =(Dept) CACHE_CONTAINER.get(CACHE_DEPT_PROFIX + deptVo.getId());
@ -180,16 +180,16 @@ public class CacheAspect {
@Around(value = POINTCUT_USER_UPDATE)
public Object cacheUserUpdate(ProceedingJoinPoint joinPoint) throws Throwable {
//取出第一个参数
UserVo deptVo = (UserVo) joinPoint.getArgs()[0];
User userVo = (User) joinPoint.getArgs()[0];
Boolean isSuccess = (Boolean) joinPoint.proceed();
if (isSuccess){
User dept =(User) CACHE_CONTAINER.get(CACHE_USER_PROFIX + deptVo.getId());
if (null==dept){
dept=new User();
User user =(User) CACHE_CONTAINER.get(CACHE_USER_PROFIX + userVo.getId());
if (null==user){
user=new User();
}
BeanUtils.copyProperties(deptVo,dept);
log.info("用户对象缓存已更新"+CACHE_USER_PROFIX + deptVo.getId());
CACHE_CONTAINER.put(CACHE_USER_PROFIX+dept.getId(),dept);
BeanUtils.copyProperties(userVo,user);
log.info("用户对象缓存已更新"+CACHE_USER_PROFIX + userVo.getId());
CACHE_CONTAINER.put(CACHE_USER_PROFIX+user.getId(),user);
}
return isSuccess;
}

@ -9,6 +9,8 @@ import com.yeqifu.sys.entity.Permission;
import com.yeqifu.sys.entity.User;
import com.yeqifu.sys.service.IDeptService;
import com.yeqifu.sys.service.IPermissionService;
import com.yeqifu.sys.service.IRoleService;
import com.yeqifu.sys.service.IUserService;
import com.yeqifu.sys.vo.DeptVo;
import com.yeqifu.sys.vo.PermissionVo;
import org.apache.commons.lang3.StringUtils;
@ -29,6 +31,12 @@ public class MenuController {
@Autowired
private IPermissionService permissionService;
@Autowired
private IUserService userService;
@Autowired
private IRoleService roleService;
@RequestMapping("loadIndexLeftMenuJson")
public DataGridView loadIndexLeftMenuJson(PermissionVo permissionVo){
//查询所有菜单
@ -46,8 +54,28 @@ public class MenuController {
//用户类型为超级管理员
list = permissionService.list(queryWrapper);
}else {
//用户类型为 管理员和普通用户
//用户类型为 普通用户
//根据用户ID+角色+权限去查询
Integer userId = user.getId();
//1.根据用户ID查询角色
List<Integer> currentUserRoleIds = roleService.queryUserRoleIdsByUid(userId);
//2.根据角色ID查询菜单ID和权限ID
//使用set去重
Set<Integer> pids = new HashSet<>();
for (Integer rid : currentUserRoleIds) {
//根据角色ID查询菜单ID和权限ID
List<Integer> permissionIds = roleService.queryRolePermissionIdsByRid(rid);
//将菜单ID和权限ID放入Set中去重
pids.addAll(permissionIds);
}
//3.根据角色ID查询权限
if (pids.size()>0){
queryWrapper.in("id",pids);
list = permissionService.list(queryWrapper);
}else {
list=new ArrayList<>();
}
}
List<TreeNode> treeNodes = new ArrayList<TreeNode>();

@ -13,8 +13,10 @@ import com.yeqifu.sys.common.DataGridView;
import com.yeqifu.sys.common.PinyinUtils;
import com.yeqifu.sys.common.ResultObj;
import com.yeqifu.sys.entity.Dept;
import com.yeqifu.sys.entity.Role;
import com.yeqifu.sys.entity.User;
import com.yeqifu.sys.service.IDeptService;
import com.yeqifu.sys.service.IRoleService;
import com.yeqifu.sys.service.IUserService;
import com.yeqifu.sys.vo.UserVo;
import org.apache.commons.lang3.StringUtils;
@ -48,6 +50,9 @@ public class UserController {
@Autowired
private IDeptService deptService;
@Autowired
private IRoleService roleService;
/**
*
* @param userVo
@ -199,6 +204,76 @@ public class UserController {
}
}
/**
*
* @param id
* @return
*/
@RequestMapping("resetPwd/{id}")
public ResultObj resetPwd(@PathVariable("id") Integer id){
try {
User user = new User();
user.setId(id);
//设置盐
String salt = IdUtil.simpleUUID().toUpperCase();
user.setSalt(salt);
//设置密码
user.setPwd(new Md5Hash(Constast.USER_DEFAULT_PWD,salt,2).toString());
userService.updateById(user);
return ResultObj.RESET_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ResultObj.RESET_ERROR;
}
}
/**
* id
* @param id id
* @return
*/
@RequestMapping("initRoleByUserId")
public DataGridView initRoleByUserId(Integer id){
//1.查询所有可用的角色
QueryWrapper<Role> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("available",Constast.AVAILABLE_TRUE);
List<Map<String, Object>> listMaps = roleService.listMaps(queryWrapper);
//2.查询当前用户拥有的角色ID集合
List<Integer> currentUserRoleIds = roleService.queryUserRoleIdsByUid(id);
for (Map<String, Object> map : listMaps) {
Boolean LAY_CHECKED=false;
Integer roleId = (Integer) map.get("id");
for (Integer rid : currentUserRoleIds) {
//如果当前用户已有该角色则让LAY_CHECKED为true。LAY_CHECKED为true时复选框选中
if (rid.equals(roleId)){
LAY_CHECKED=true;
break;
}
}
map.put("LAY_CHECKED",LAY_CHECKED);
}
return new DataGridView(Long.valueOf(listMaps.size()),listMaps);
}
/**
*
* @param uid ID
* @param ids ID
* @return
*/
@RequestMapping("saveUserRole")
public ResultObj saveUserRole(Integer uid,Integer[] ids){
try {
userService.saveUserRole(uid,ids);
return ResultObj.DISPATCH_SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ResultObj.DISPATCH_ERROR;
}
}
}

@ -50,4 +50,18 @@ public interface RoleMapper extends BaseMapper<Role> {
* @param id
*/
void deleteRoleUserByUid(@Param("id") Serializable id);
/**
* ID
* @param id
* @return
*/
List<Integer> queryUserRoleIdsByUid(@Param("id") Integer id);
/**
*
* @param uid ID
* @param rid ID
*/
void insertUserRole(@Param("uid") Integer uid,@Param("rid") Integer rid);
}

@ -2,6 +2,7 @@ package com.yeqifu.sys.mapper;
import com.yeqifu.sys.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface UserMapper extends BaseMapper<User> {
}

@ -2,19 +2,29 @@ package com.yeqifu.sys.realm;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yeqifu.sys.common.ActiverUser;
import com.yeqifu.sys.common.Constast;
import com.yeqifu.sys.entity.Permission;
import com.yeqifu.sys.entity.User;
import com.yeqifu.sys.service.IPermissionService;
import com.yeqifu.sys.service.IRoleService;
import com.yeqifu.sys.service.IUserService;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @Author: -
* @Date: 2019/11/21 20:44
@ -28,6 +38,14 @@ public class UserRealm extends AuthorizingRealm {
@Lazy
private IUserService userService;
@Autowired
@Lazy
private IPermissionService permissionService;
@Autowired
@Lazy
private IRoleService roleService;
@Override
public String getName(){
return this.getClass().getSimpleName();
@ -40,7 +58,20 @@ public class UserRealm extends AuthorizingRealm {
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
ActiverUser activerUser = (ActiverUser) principalCollection.getPrimaryPrincipal();
User user = activerUser.getUser();
List<String> superPermission = new ArrayList<>();
superPermission.add("*:*");
List<String> permissions = activerUser.getPermission();
if (user.getType().equals(Constast.USER_TYPE_SUPER)){
authorizationInfo.addStringPermissions(superPermission);
}else {
if (null!=permissions&&permissions.size()>0){
authorizationInfo.addStringPermissions(permissions);
}
}
return authorizationInfo;
}
/**
@ -58,6 +89,34 @@ public class UserRealm extends AuthorizingRealm {
if (null!=user){
ActiverUser activerUser = new ActiverUser();
activerUser.setUser(user);
//根据用户ID查询percode
QueryWrapper<Permission> qw = new QueryWrapper<>();
//设置只能查询菜单
qw.eq("type", Constast.TYPE_PERMISSION);
//设置只能查询可用的菜单
qw.eq("available",Constast.AVAILABLE_TRUE);
Integer userId = user.getId();
//根据用户ID查询角色ID
List<Integer> currentUserRoleIds = roleService.queryUserRoleIdsByUid(userId);
//根据角色ID查询出权限ID
Set<Integer> pids = new HashSet<>();
for (Integer rid : currentUserRoleIds) {
List<Integer> permissionIds = roleService.queryRolePermissionIdsByRid(rid);
pids.addAll(permissionIds);
}
List<Permission> list = new ArrayList<>();
if (pids.size()>0){
qw.in("id",pids);
list = permissionService.list(qw);
}
List<String> percodes = new ArrayList<>();
for (Permission permission : list) {
percodes.add(permission.getPercode());
}
//放到activerUser
activerUser.setPermission(percodes);
//生成盐
ByteSource credentialsSalt=ByteSource.Util.bytes(user.getSalt());
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(activerUser,user.getPwd(),credentialsSalt,this.getName());

@ -28,4 +28,11 @@ public interface IRoleService extends IService<Role> {
* @param ids
*/
void saveRolePermission(Integer rid, Integer[] ids);
/**
* ID
* @param id
* @return
*/
List<Integer> queryUserRoleIdsByUid(Integer id);
}

@ -13,4 +13,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IUserService extends IService<User> {
/**
*
* @param uid ID
* @param ids ID
*/
void saveUserRole(Integer uid, Integer[] ids);
}

@ -57,4 +57,15 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
}
}
}
/**
* ID
* @param id
* @return
*/
@Override
public List<Integer> queryUserRoleIdsByUid(Integer id) {
return getBaseMapper().queryUserRoleIdsByUid(id);
}
}

@ -50,4 +50,20 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
return super.removeById(id);
}
/**
*
* @param uid ID
* @param ids ID
*/
@Override
public void saveUserRole(Integer uid, Integer[] ids) {
//1.根据用户ID删除sys_user_role里面的数据
roleMapper.deleteRoleUserByUid(uid);
if (null!=ids&&ids.length>0){
for (Integer rid : ids) {
roleMapper.insertUserRole(uid,rid);
}
}
}
}

@ -25,5 +25,14 @@
delete from sys_user_role where uid = #{id}
</delete>
<!--ID-->
<select id="queryUserRoleIdsByUid" resultType="java.lang.Integer">
select rid from sys_user_role where uid = #{id}
</select>
<!-- -->
<insert id="insertUserRole">
insert into sys_user_role(uid,rid) values (#{uid},#{rid})
</insert>
</mapper>

@ -1,5 +1,6 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<meta charset="UTF-8">
<title>Right</title>
@ -59,15 +60,15 @@
<div>
<table class="layui-hide" id="deptTable" lay-filter="deptTable"></table>
<div id="deptToolBar" style="display: none">
<button type="button" lay-event="add" class="layui-btn layui-btn-sm layui-btn-normal layui-btn-radius">
<button type="button" lay-event="add" shiro:hasPermission="dept:create" class="layui-btn layui-btn-sm layui-btn-normal layui-btn-radius">
<i class="layui-icon layui-icon-add-1"></i>
</button>
</div>
<div id="deptRowBar" style="display: none;">
<button type="button" lay-event="update" class="layui-btn layui-btn-sm layui-btn-radius"><i
<button type="button" lay-event="update" shiro:hasPermission="dept:update" class="layui-btn layui-btn-sm layui-btn-radius"><i
class="layui-icon layui-icon-edit"></i>
</button>
<button type="button" lay-event="delete" class="layui-btn layui-btn-sm layui-btn-danger layui-btn-radius"><i
<button type="button" lay-event="delete" shiro:hasPermission="dept:delete" class="layui-btn layui-btn-sm layui-btn-danger layui-btn-radius"><i
class="layui-icon layui-icon-delete"></i>
</button>
</div>

@ -210,6 +210,12 @@
</form>
</div>
<!---->
<div style="display: none;padding: 10px;" id="selectUserRoleDiv">
<table class="layui-hide" id="roleTable" lay-filter="roleTable"></table>
</div>
<script type="text/javascript" src="/resources/layui/layui.js"></script>
<script type="text/javascript">
@ -317,6 +323,12 @@
case 'update':
updateUser(data);
break;
case 'resetPwd':
resetPwd(data);
break;
case 'selectRole':
selectRole(data);
break;
}
;
});
@ -418,6 +430,16 @@
});
}
//重置密码
function resetPwd(data) {
layer.confirm('' + data.name + '', {icon: 3, title: ''}, function (index) {
$.post("/user/resetPwd/"+data.id, function (res) {
layer.msg(res.msg);
});
layer.close(index);
});
}
//初始化查询条件的下拉树
var selectTree = dtree.renderSelect({
elem: "#search_deptTree",
@ -492,6 +514,58 @@
});
//打开分配角色的弹出层
function selectRole(data) {
mainIndex = layer.open({
type:1,
content:$("#selectUserRoleDiv"),
area:['650px','400px'],
title:'给'+data.name+'',
btn: ['<span class=layui-icon>&#xe605;</span>','<span class=layui-icon>&#x1006;</span>'],
btnAlign:'c',
yes: function(index, layero){
var checkStatus = table.checkStatus('roleTable');
var params = "uid="+data.id;
$.each(checkStatus.data,function (index, item) {
params+="&ids="+item.id;
});
$.post("/user/saveUserRole",params,function (res) {
layer.msg(res.msg);
layer.close(mainIndex);
})
},
btn2: function(index, layero){
//关闭弹出层
},
success:function () {
initRoleTable(data);
}
});
}
var roleTableIns;
//初始化角色列表
function initRoleTable(data) {
console.log(data);
roleTableIns = table.render({
elem:'#roleTable',
url:'/user/initRoleByUserId',
//将用户id传到后台去
where:{
id:data.id
},
cols:[ [
{type:'checkbox',align:'center'},
{field:'id',title:'ID',align:'center'},
{field:'name',title:'',align:'center'},
{field:'remark',title:'',align:'center'}
] ]
});
}
});
</script>

Loading…
Cancel
Save