whyczh
2021-05-12 fcfa92ce6b576aaca5235137fe0ed863df0e62e5
用户角色权限接口更新
7个文件已修改
244 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/RoleController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/UserController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/Role.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/User.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/RoleService.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/UserService.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/RolePermissionMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/RoleController.java
@@ -1,6 +1,7 @@
package com.whyc.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.pagehelper.PageInfo;
import com.whyc.dto.Response;
import com.whyc.pojo.*;
import com.whyc.service.*;
@@ -39,20 +40,20 @@
    /**=============用户与角色================**/
    @GetMapping("userWithNoRole")
    @ApiOperation(value = "查询未分配角色的用户")
//    @GetMapping("userWithNoRole")
//    @ApiOperation(value = "查询未分配角色的用户")
    public List<User> getUserWithNoRole(){
        return userRoleService.getUserWithNoRole();
    }
    @GetMapping("userWithRole")
    @ApiOperation(value = "查询分配角色的用户")
//    @GetMapping("userWithRole")
//    @ApiOperation(value = "查询分配角色的用户")
    public List<UserRole> getUserWithRole(){
        return userRoleService.getUserWithRole();
    }
    @GetMapping("userWithRoleMap")
    @ApiOperation(value = "查询分配角色的用户Map")
//    @GetMapping("userWithRoleMap")
//    @ApiOperation(value = "查询分配角色的用户Map")
    public Map<String,List<UserRole>> getUserWithRoleMap(){
        return userRoleService.getUserWithRoleMap();
    }
@@ -65,10 +66,21 @@
    @PostMapping("search")
    @ApiOperation(value = "查询角色分页-根据筛选条件")
    public Response<IPage<Role>> getRoleByCondition(@RequestParam int pageNum, @RequestParam int pageSize, @RequestBody Role role){
    public Response<PageInfo<Role>> getRoleByCondition(@RequestParam int pageNum, @RequestParam int pageSize, @RequestBody Role role){
        return roleService.getRoleByCondition(pageNum,pageSize,role);
    }
    @GetMapping("getUserByRoleId")
    @ApiOperation(value = "通过角色id获取用户信息")
    public Response<PageInfo<User>> getUserByRoleId(@RequestParam int roleId){
        return roleService.getUserByRoleId(roleId);
    }
    @PutMapping("updateRoleState")
    @ApiOperation(value = "启用/冻结角色")
    public Response updateRoleState(@RequestParam int roleId,@RequestParam int state){
        return roleService.updateRoleState(roleId,state);
    }
    @PostMapping
@@ -77,22 +89,22 @@
        return roleService.add(role);
    }
    @PostMapping("batch")
    @ApiOperation(value = "批量新增角色")
//    @PostMapping("batch")
//    @ApiOperation(value = "批量新增角色")
    public boolean addBatch(@RequestBody List<Role> roles){
        return roleService.addBatch(roles);
    }
    @PostMapping("bindingUserWithRole")
    @ApiOperation(value = "绑定用户和角色")
    @CacheEvict(cacheNames = {"userBridge"},key="'getAuthorizationInfo'+#p0") //清除
//    @PostMapping("bindingUserWithRole")
//    @ApiOperation(value = "绑定用户和角色")
//    @CacheEvict(cacheNames = {"userBridge"},key="'getAuthorizationInfo'+#p0") //清除
    public boolean bindingUserWithRole(@RequestParam int userId,int roleId){
        return userRoleService.bindingUserWithRole(userId,roleId);
    }
    @PostMapping("bindingUserWithRoleBatch")
    @ApiOperation(value = "批量绑定用户和角色",notes = "传入userId和roleId的数组")
    @CacheEvict(cacheNames = {"userBridge"},allEntries = true) //全部清除
//    @PostMapping("bindingUserWithRoleBatch")
//    @ApiOperation(value = "批量绑定用户和角色",notes = "传入userId和roleId的数组")
//    @CacheEvict(cacheNames = {"userBridge"},allEntries = true) //全部清除
    public boolean bindingUserWithRoleBatch(@RequestBody List<UserRole> userRoles){
        return userRoleService.bindingUserWithRoleBatch(userRoles);
    }
@@ -105,16 +117,16 @@
        return permissionService.getAll();
    }
    @PostMapping("bindingRoleWithPermission")
    @ApiOperation(value = "绑定角色-权限")
    @CacheEvict(cacheNames = {"userBridge"},allEntries = true) //全部清除
//    @PostMapping("bindingRoleWithPermission")
//    @ApiOperation(value = "绑定角色-权限")
//    @CacheEvict(cacheNames = {"userBridge"},allEntries = true) //全部清除
    public boolean bindingRoleWithPermission(@RequestParam int roleId,int permissionId){
        return rolePermissionService.bindingUserWithRole(roleId,permissionId);
    }
    @PostMapping("bindingRoleWithPermissionBatch")
    @ApiOperation(value = "批量绑定角色-权限",notes = "传入roleId和privilegeId的数组")
    @CacheEvict(cacheNames = {"userBridge"},allEntries = true) //全部清除
//    @PostMapping("bindingRoleWithPermissionBatch")
//    @ApiOperation(value = "批量绑定角色-权限",notes = "传入roleId和privilegeId的数组")
//    @CacheEvict(cacheNames = {"userBridge"},allEntries = true) //全部清除
    public boolean bindingRoleWithPermissionBatch(@RequestBody List<RolePermission> rolePermissions){
        return rolePermissionService.bindingUserWithRoleBatch(rolePermissions);
    }
@@ -129,8 +141,8 @@
    /**==============用户-角色-菜单================**/
    @GetMapping("allMenus")
    @ApiOperation(value = "获取所有菜单")
//    @GetMapping("allMenus")
//    @ApiOperation(value = "获取所有菜单")
    public List<Menu> getAllMenu(){
        return roleMenuService.getAllMenus();
    }
src/main/java/com/whyc/controller/UserController.java
@@ -87,6 +87,11 @@
        return userService.getPageByCondition(pageNum,pageSize,user);
    }
    @GetMapping("validatePassword")
    public boolean validatePassword(@RequestParam String userName, @RequestParam String password){
        return userService.validatePassword(userName,password);
    }
    @PutMapping
    @ApiOperation(value = "编辑用户")
    //@RequiresPermissions(value = {"user:update"})
src/main/java/com/whyc/pojo/Role.java
@@ -31,11 +31,14 @@
    @ApiModelProperty("更新时间")
    @JsonFormat(locale = "zh",timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    @ApiModelProperty("状态:0未启用,1启用")
    @ApiModelProperty("状态:0启用,1冻结")
    private Integer state;
    @ApiModelProperty("查询字段")
    @TableField(exist = false)
    private String search;
    @ApiModelProperty("权限人数")
    @TableField(exist = false)
    private Integer userCount;
    public Role() {
    }
src/main/java/com/whyc/pojo/User.java
@@ -5,6 +5,7 @@
import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
import cn.afterturn.easypoi.handler.inter.IExcelModel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
@@ -25,6 +26,7 @@
    @TableField(exist = false)
    private String errorMsg;
    @TableId
    private Integer id;
    @ApiModelProperty("用户账号")
    @Excel(name = "账号",width = 25,orderNum = "1",isImportField = "true_st")
src/main/java/com/whyc/service/RoleService.java
@@ -3,14 +3,21 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageInfo;
import com.whyc.dto.Response;
import com.whyc.mapper.RoleMapper;
import com.whyc.mapper.UserMapper;
import com.whyc.mapper.UserRoleMapper;
import com.whyc.pojo.OperationLog;
import com.whyc.pojo.Role;
import com.whyc.pojo.User;
import com.whyc.pojo.UserRole;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -19,18 +26,30 @@
    @Resource
    private RoleMapper mapper;
    @Resource
    private UserRoleMapper userRoleMapper;
    @Resource
    private UserMapper userMapper;
    public List<Role> getAll() {
        return mapper.selectList(null);
    }
    public Response<IPage<Role>> getRoleByCondition(int pageNum,int pageSize,Role role){
    public Response<PageInfo<Role>> getRoleByCondition(int pageNum,int pageSize,Role role){
        QueryWrapper<Role> queryWrapper = new QueryWrapper<>(role);
        queryWrapper.or().like(StringUtils.isNotEmpty(role.getSearch()) ,"label",role.getSearch());
        queryWrapper.or().like(StringUtils.isNotEmpty(role.getSearch()) ,"description",role.getSearch());
        IPage<Role> roleIPage = mapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
        return new Response<IPage<Role>>().set(1,roleIPage);
        List<Role> list = mapper.selectList(queryWrapper);
        for (Role role1: list) {
            QueryWrapper<UserRole> userRoleQueryWrapper = new QueryWrapper<>();
            userRoleQueryWrapper.eq("role_id",role1.getId());
            int count = userRoleMapper.selectCount(userRoleQueryWrapper);
            role1.setUserCount(count);
        }
        //IPage<Role> roleIPage = mapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
        PageInfo<Role> rolePageInfo = new PageInfo<>(list);
        return new Response<PageInfo<Role>>().set(1,rolePageInfo);
    }
    public Response add(Role role) {
@@ -43,7 +62,7 @@
            return new Response().setMsg(0,"已有此权限组数据");
        }
        role.setState(1);
        role.setState(0);
        role.setUpdateTime(new Date());
        mapper.insert(role);
        return new Response().set(1,role,"添加成功");
@@ -53,4 +72,32 @@
        return mapper.insertBatchSomeColumn(roles)==roles.size();
    }
    public Response<PageInfo<User>> getUserByRoleId(int roleId){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.select("user_id").eq("role_id",roleId);
        List<UserRole> userIds = userRoleMapper.selectList(queryWrapper);
        List<User> userList = new ArrayList<>();
        for (UserRole userRole:userIds) {
            User user = userMapper.selectById(userRole.getUserId());
            userList.add(user);
        }
        PageInfo<User> pageInfo = new PageInfo<>(userList);
        return new Response<PageInfo<User>>().set(1,pageInfo);
    }
    public Response updateRoleState(int roleId,int state){
        Role role = mapper.selectById(roleId);
        role.setState(state);
        if(mapper.updateById(role)>0){
            if (state==0){
                return new Response().setMsg(1,"启用成功");
            }else{
                return new Response().setMsg(1,"冻结成功");
            }
        }else {
            return new Response().setMsg(0,"更新失败");
        }
    }
}
src/main/java/com/whyc/service/UserService.java
@@ -11,6 +11,9 @@
import com.whyc.pojo.User;
import com.whyc.util.DigestsUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@@ -36,6 +39,7 @@
    @Resource
    private UserBridgeService userBridgeService;
    @Autowired
    private ApplicationContext applicationContext;
@@ -55,15 +59,15 @@
            } else {
                return new Response<>().set(1, false, "添加失败");
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            return new Response<>().set(0);
        }
    }
    public boolean addBatch(List<User> roles) {
        return userMapper.insertBatchSomeColumn(roles)==roles.size();
    }
    public boolean addBatch(List<User> roles) {
        return userMapper.insertBatchSomeColumn(roles) == roles.size();
    }
    public User getById(int id) {
@@ -80,34 +84,47 @@
        return userMapper.selectPage(page, null);
    }
    public Response<IPage<User>> getPageByCondition(int pageNum,int pageSize,User user){
    public Response<IPage<User>> getPageByCondition(int pageNum, int pageSize, User user) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
        queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()) ,"name",user.getSearch());
        queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()),"real_name",user.getSearch());
        queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()),"phone",user.getSearch());
        queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()),"email",user.getSearch());
        IPage<User> page = userMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
        return new Response<IPage<User>>().set(1,page);
        queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "name", user.getSearch());
        queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "real_name", user.getSearch());
        queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "phone", user.getSearch());
        queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "email", user.getSearch());
        IPage<User> page = userMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
        return new Response<IPage<User>>().set(1, page);
    }
    public boolean validatePassword(String userName, String password) {
        User user = userBridgeService.findPasswordAndSlatByUserName(userName);
        boolean result = user.getPassword().equals(DigestsUtil.sha1(password, user.getSalt()));
        return result;
    }
    public Response update(User user) {
        if(userMapper.updateById(user)>0){
            return new Response().setMsg(1,"更新成功");
        }else {
            return new Response().setMsg(0,"更新失败");
        Map<String, String> encryptMap = DigestsUtil.encryptPassword(user.getPassword());
        user.setPassword(encryptMap.get("password"));
        user.setSalt(encryptMap.get("salt"));
        if (userMapper.updateById(user) > 0) {
            return new Response().setMsg(1, "更新成功");
        } else {
            return new Response().setMsg(0, "更新失败");
        }
    }
    public Response updateUserFreeze(int id,int state){
        User user =userMapper.selectById(id);
    public Response updateUserFreeze(int id, int state) {
        User user = userMapper.selectById(id);
        user.setState(state);
        if(userMapper.updateById(user)>0){
            if (state==0){
                return new Response().setMsg(1,"启用成功");
            }else{
                return new Response().setMsg(1,"冻结成功");
        if (userMapper.updateById(user) > 0) {
            if (state == 0) {
                return new Response().setMsg(1, "启用成功");
            } else {
                return new Response().setMsg(1, "冻结成功");
            }
        }else {
            return new Response().setMsg(0,"更新失败");
        } else {
            return new Response().setMsg(0, "更新失败");
        }
    }
@@ -122,40 +139,40 @@
    }*/
    public Response delete(int id) {
        if(userMapper.deleteById(id)>0){
            return new Response().setMsg(1,"删除成功");
        }else {
            return new Response().setMsg(0,"删除失败");
        if (userMapper.deleteById(id) > 0) {
            return new Response().setMsg(1, "删除成功");
        } else {
            return new Response().setMsg(0, "删除失败");
        }
    }
    public boolean login(String username, String password , HttpServletRequest request) {
        boolean flag=false;
    public boolean login(String username, String password, HttpServletRequest request) {
        boolean flag = false;
        //查询用户名和密码是否正确
        QueryWrapper<User> queryWrapper = query();
        queryWrapper.eq("name",username).eq("password",password);
        queryWrapper.eq("name", username).eq("password", password);
        User user = userMapper.selectOne(queryWrapper);
        if (user!=null){
            flag=true;
        if (user != null) {
            flag = true;
            //session中存储用户信息,设置有效期30分钟
            HttpSession session = request.getSession();
            long timestamp = System.currentTimeMillis();
            session.setAttribute("user",user);
            session.setAttribute("timestamp",timestamp);
            session.setAttribute("user", user);
            session.setAttribute("timestamp", timestamp);
            session.setMaxInactiveInterval(1800);
            //servletContext中存储用户信息
            ServletContext servletContext = request.getServletContext();
           Map<String,UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users");
            if(userMap==null){
            Map<String, UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users");
            if (userMap == null) {
                log.info("servletContext首次存值");
                userMap = new HashMap<>();
                userMap.put(username,new UserLoginInfo(username,timestamp));
                servletContext.setAttribute("users",userMap);
            }else{
                userMap.put(username, new UserLoginInfo(username, timestamp));
                servletContext.setAttribute("users", userMap);
            } else {
                log.info("servletContext已经有值");
                userMap.put(username,new UserLoginInfo(username,timestamp));
                servletContext.setAttribute("users",userMap);
                userMap.put(username, new UserLoginInfo(username, timestamp));
                servletContext.setAttribute("users", userMap);
            }
        }
        return flag;
@@ -170,15 +187,15 @@
        User user = (User) session.getAttribute("user");
        Long timestamp = (Long) session.getAttribute("timestamp");
        if(user==null){
        if (user == null) {
            return false;
        }
        Map<String,UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users");
        Map<String, UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users");
        UserLoginInfo userLoginInfo = userMap.get(user.getName());
        if(userLoginInfo.getUsername().equals(user.getName()) && userLoginInfo.getTimestamp().compareTo(timestamp)==0){
                //说明没有从其他地方登录
        }else{
        if (userLoginInfo.getUsername().equals(user.getName()) && userLoginInfo.getTimestamp().compareTo(timestamp) == 0) {
            //说明没有从其他地方登录
        } else {
            //说明从其他地方登录了,当前用户的session清除
            flag = true;
            session.invalidate();
src/main/resources/mapper/RolePermissionMapper.xml
@@ -3,9 +3,11 @@
<mapper namespace="com.whyc.mapper.RolePermissionMapper" >
    <select id="findPermissionsByUserId" resultType="java.lang.String">
        select p.name  from tb_user_role ur,tb_role_permission rp,tb_permission p
        select p.name  from tb_user_role ur,tb_role_permission rp,tb_permission p,tb_role r
        where ur.role_id = rp.role_id
        and rp.permission_id=p.id
        and r.id = ur.role_id
        and r.state = 0
        and user_id=#{userId};
    </select>
@@ -13,9 +15,11 @@
    <!--    app mapper-->
    <select id="findAppPermissionsByUserId" resultType="java.lang.String">
        select p.name  from tb_user_role ur,tb_role_permission rp,tb_permission p
        select p.name  from tb_user_role ur,tb_role_permission rp,tb_permission p,tb_role r
        where ur.role_id = rp.role_id
          and rp.permission_id=p.id
          and r.id = ur.role_id
          and r.state = 0
          and user_id=#{userId};
    </select>