瀏覽代碼

给角色修改(新增)权限

xusonglin 5 年之前
父節點
當前提交
272b2acd85

+ 3 - 3
src/main/java/com/jkcredit/invoice/hub/controller/web/rolePermission/RolePermissionResource.java

@@ -31,10 +31,10 @@ public class RolePermissionResource extends WebResource {
         try {
             validate(rolePermissionFB);
             RolePermissionDto dto = mapper.map(rolePermissionFB, RolePermissionDto.class);
-            rolePermissionService.saveRolePermission(dto);
-            return ResponseData.success("添加成功");
+            rolePermissionService.updateRolePermission(dto);
+            return ResponseData.success("操作成功");
         } catch (ServiceException e) {
-            return ResponseData.failed("添加失败,失败原因" + e.getMessage());
+            return ResponseData.failed("操作失败,失败原因" + e.getMessage());
         }
     }
 

+ 2 - 2
src/main/java/com/jkcredit/invoice/hub/mapper/RolePermissionMapper.java

@@ -12,7 +12,7 @@ import java.util.List;
  * @version: V1.0
  **/
 public interface RolePermissionMapper extends BaseMapper<RolePermissionPo> {
-    List<Long> getPermissions(Long roleId);
+    List<Long> getPermissionIdByRoleId(Long roleId);
 
-    List<RolePermissionPo> getPermissionsByRoleId(Long roleId);
+    List<RolePermissionPo> getPermissionByRoleId(Long roleId);
 }

+ 5 - 0
src/main/java/com/jkcredit/invoice/hub/mapper/UserRolePermissionMapper.java

@@ -3,6 +3,8 @@ package com.jkcredit.invoice.hub.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jkcredit.invoice.hub.model.po.userRolePermission.UserRolePermissionPo;
 
+import java.util.List;
+
 /**
  * @description:
  * @author: xusonglin
@@ -10,4 +12,7 @@ import com.jkcredit.invoice.hub.model.po.userRolePermission.UserRolePermissionPo
  * @version: V1.0
  **/
 public interface UserRolePermissionMapper extends BaseMapper<UserRolePermissionPo> {
+    List<UserRolePermissionPo> getUserRolePermissionByRoleId(Long roleId);
+
+    List<Long> getUserIdByRoleId(Long roleId);
 }

+ 7 - 2
src/main/java/com/jkcredit/invoice/hub/service/rolePermission/RolePermissionService.java

@@ -1,6 +1,7 @@
 package com.jkcredit.invoice.hub.service.rolePermission;
 
 import com.jkcredit.invoice.hub.model.dto.rolePermission.RolePermissionDto;
+import com.jkcredit.invoice.hub.model.po.rolePermission.RolePermissionPo;
 import com.jkcredit.invoice.hub.model.vo.rolePermission.RolePermissionVo;
 
 import java.util.List;
@@ -12,7 +13,11 @@ import java.util.List;
  * @version: V1.0
  **/
 public interface RolePermissionService {
-    void saveRolePermission(RolePermissionDto rolePermissionDto);
+//    void saveRolePermission(RolePermissionDto rolePermissionDto);
 
-    List<RolePermissionVo> getPermissionsByRoleId(Long roleId);
+    List<Long> getPermissionsByRoleId(Long roleId);
+
+    void updateRolePermission(RolePermissionDto rolePermissionDto);
+
+    void deleteRolePermissionByRoleId(Long roleId, List<Long> permissionList);
 }

+ 81 - 14
src/main/java/com/jkcredit/invoice/hub/service/rolePermission/RolePermissionServiceImpl.java

@@ -1,19 +1,21 @@
 package com.jkcredit.invoice.hub.service.rolePermission;
 
+import com.jkcredit.invoice.hub.constant.CommonConstant;
 import com.jkcredit.invoice.hub.mapper.RolePermissionMapper;
 import com.jkcredit.invoice.hub.model.dto.rolePermission.RolePermissionDto;
 import com.jkcredit.invoice.hub.model.po.rolePermission.RolePermissionPo;
-import com.jkcredit.invoice.hub.model.vo.rolePermission.RolePermissionVo;
 import com.jkcredit.invoice.hub.service.base.BaseService;
+import com.jkcredit.invoice.hub.service.userRolePermission.UserRolePermissionService;
 import com.jkcredit.invoice.hub.spi.lang.exception.ServiceException;
-import com.jkcredit.invoice.hub.util.BeanUtil;
+import com.jkcredit.invoice.hub.util.CommonUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 
 /**
@@ -28,12 +30,70 @@ import java.util.List;
 public class RolePermissionServiceImpl extends BaseService implements RolePermissionService {
     @Resource
     RolePermissionMapper rolePermissionMapper;
+    @Autowired
+    UserRolePermissionService userRolePermissionService;
+
+//    @Override
+//    @Transactional(rollbackFor = ServiceException.class)
+//    public void saveRolePermission(RolePermissionDto rolePermissionDto) {
+//        validate(rolePermissionDto);
+//        for (Long permissionId : rolePermissionDto.getPermissionIds()) {
+//            RolePermissionPo rolePermissionPo = new RolePermissionPo();
+//            rolePermissionPo.setRoleId(rolePermissionDto.getRoleId());
+//            rolePermissionPo.setPermissionId(permissionId);
+//            rolePermissionPo.setCreateTime(new Date());
+//            try {
+//                rolePermissionMapper.insert(rolePermissionPo);
+//            } catch (Exception e) {
+//                log.error("新增角色权限失败,失败原因:{}", e.getMessage());
+//                throw new ServiceException("新增角色权限失败");
+//            }
+//
+//        }
+//    }
+
+    @Override
+    public List<Long> getPermissionsByRoleId(Long roleId) {
+        List<Long> permissions;
+        try {
+            permissions = rolePermissionMapper.getPermissionIdByRoleId(roleId);
+        } catch (Exception e) {
+            log.error("根据角色ID获取权限失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("根据角色ID获取权限失败");
+        }
+        return permissions;
+    }
 
     @Override
     @Transactional(rollbackFor = ServiceException.class)
-    public void saveRolePermission(RolePermissionDto rolePermissionDto) {
+    public void updateRolePermission(RolePermissionDto rolePermissionDto) {
         validate(rolePermissionDto);
-        for (Long permissionId : rolePermissionDto.getPermissionIds()) {
+        // 获取角色下所有permissionId
+        List<Long> permissions = rolePermissionMapper.getPermissionIdByRoleId(rolePermissionDto.getRoleId());
+        if (permissions.size() == 0) {
+            // 没有为角色添加过权限,所以直接新增即可
+            addRolePermissions(permissions, rolePermissionDto);
+        } else {
+            // 角色已经添加过权限,判断传入权限,哪些是新增,哪些需要删除
+
+            // 需要新增的权限
+            List<Long> addList = CommonUtil.getSubtraction(new HashSet<>(rolePermissionDto.getPermissionIds()), new HashSet<>(permissions));
+            // 对角色授权
+            addRolePermissions(addList, rolePermissionDto);
+            // 对用户角色授权
+            userRolePermissionService.saveUserRolePermissionByRoleId(rolePermissionDto.getRoleId(), addList);
+
+            // 需要删除的角色权限
+            List<Long> updateList = CommonUtil.getIntersection(new HashSet<>(rolePermissionDto.getPermissionIds()), new HashSet<>(permissions));
+            // 删除角色授权
+            deleteRolePermissionByRoleId(rolePermissionDto.getRoleId(), updateList);
+            // 删除用户角色授权
+            userRolePermissionService.updateUserRolePermissionByRoleId(rolePermissionDto.getRoleId(), updateList);
+        }
+    }
+
+    private void addRolePermissions(List<Long> databasePermissions, RolePermissionDto rolePermissionDto) {
+        for (Long permissionId : databasePermissions) {
             RolePermissionPo rolePermissionPo = new RolePermissionPo();
             rolePermissionPo.setRoleId(rolePermissionDto.getRoleId());
             rolePermissionPo.setPermissionId(permissionId);
@@ -44,19 +104,26 @@ public class RolePermissionServiceImpl extends BaseService implements RolePermis
                 log.error("新增角色权限失败,失败原因:{}", e.getMessage());
                 throw new ServiceException("新增角色权限失败");
             }
-
         }
     }
 
     @Override
-    public List<RolePermissionVo> getPermissionsByRoleId(Long roleId) {
-        List<RolePermissionPo> rolePermissionPoList = rolePermissionMapper.getPermissionsByRoleId(roleId);
-        List<RolePermissionVo> rolePermissionVoList = new ArrayList<>();
-        for (RolePermissionPo rolePermissionPo : rolePermissionPoList) {
-            RolePermissionVo rolePermissionVo = new RolePermissionVo();
-            BeanUtil.copyProperties(rolePermissionVo, rolePermissionPo);
-            rolePermissionVoList.add(rolePermissionVo);
+    public void deleteRolePermissionByRoleId(Long roleId, List<Long> permissionList) {
+        try {
+            List<RolePermissionPo> rolePermissionPoList = rolePermissionMapper.getPermissionByRoleId(roleId);
+            for (RolePermissionPo rolePermissionPo : rolePermissionPoList) {
+                for (Long permissionId : permissionList) {
+                    if (rolePermissionPo.getPermissionId().equals(permissionId)) {
+                        rolePermissionPo.setActivated(CommonConstant.ACTIVATED_DELETED);
+                        rolePermissionPo.setUpdateTime(new Date());
+                        rolePermissionMapper.updateById(rolePermissionPo);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("删除角色权限失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("删除角色权限失败");
         }
-        return rolePermissionVoList;
+
     }
 }

+ 6 - 0
src/main/java/com/jkcredit/invoice/hub/service/userRolePermission/UserRolePermissionService.java

@@ -2,6 +2,8 @@ package com.jkcredit.invoice.hub.service.userRolePermission;
 
 import com.jkcredit.invoice.hub.model.dto.userRolePermission.UserRolePermissionDto;
 
+import java.util.List;
+
 /**
  * @description:
  * @author: xusonglin
@@ -10,4 +12,8 @@ import com.jkcredit.invoice.hub.model.dto.userRolePermission.UserRolePermissionD
  **/
 public interface UserRolePermissionService {
     void saveUserRolePermission(UserRolePermissionDto dto);
+
+    void saveUserRolePermissionByRoleId(Long roleId, List<Long> permissionIdList);
+
+    void updateUserRolePermissionByRoleId(Long roleId, List<Long> permissionIdList);
 }

+ 42 - 1
src/main/java/com/jkcredit/invoice/hub/service/userRolePermission/UserRolePermissionServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jkcredit.invoice.hub.service.userRolePermission;
 
+import com.jkcredit.invoice.hub.constant.CommonConstant;
 import com.jkcredit.invoice.hub.mapper.RolePermissionMapper;
 import com.jkcredit.invoice.hub.mapper.UserRolePermissionMapper;
 import com.jkcredit.invoice.hub.model.dto.userRolePermission.UserRolePermissionDto;
@@ -32,7 +33,7 @@ public class UserRolePermissionServiceImpl extends BaseService implements UserRo
     public void saveUserRolePermission(UserRolePermissionDto dto) {
         validate(dto);
         // 此处为用户授权接口,需要根据roleId 查询rolePermission表中的所以permissionId,循环放入userRolePermission
-        List<Long> permissions = rolePermissionMapper.getPermissions(dto.getRoleId());
+        List<Long> permissions = rolePermissionMapper.getPermissionIdByRoleId(dto.getRoleId());
 
         try {
             for (Long permission : permissions) {
@@ -48,4 +49,44 @@ public class UserRolePermissionServiceImpl extends BaseService implements UserRo
             throw new ServiceException("新增用户权限失败");
         }
     }
+
+    @Override
+    public void saveUserRolePermissionByRoleId(Long roleId, List<Long> permissionIdList) {
+        try {
+            List<Long> userIdList = mapper.getUserIdByRoleId(roleId);
+            for (Long userId : userIdList) {
+                for (Long permissionId : permissionIdList) {
+                    UserRolePermissionPo userRolePermissionPo = new UserRolePermissionPo();
+                    userRolePermissionPo.setUserId(userId);
+                    userRolePermissionPo.setRoleId(roleId);
+                    userRolePermissionPo.setPermissionId(permissionId);
+                    userRolePermissionPo.setCreateTime(new Date());
+                    mapper.insert(userRolePermissionPo);
+                }
+            }
+        } catch (Exception e) {
+            log.error("新增用户权限失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("新增用户权限失败");
+        }
+    }
+
+    @Override
+    public void updateUserRolePermissionByRoleId(Long roleId, List<Long> permissionIdList) {
+        try {
+            List<UserRolePermissionPo> userRolePermissionPoList = mapper.getUserRolePermissionByRoleId(roleId);
+            for (UserRolePermissionPo userRolePermissionPo : userRolePermissionPoList) {
+                for (Long permissionId : permissionIdList) {
+                    if (userRolePermissionPo.getPermissionId().equals(permissionId)) {
+                        userRolePermissionPo.setActivated(CommonConstant.ACTIVATED_DELETED);
+                        userRolePermissionPo.setUpdateTime(new Date());
+                        mapper.updateById(userRolePermissionPo);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("删除用户权限失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("删除用户权限失败");
+        }
+
+    }
 }

+ 15 - 2
src/main/java/com/jkcredit/invoice/hub/util/CommonUtil.java

@@ -2,8 +2,7 @@ package com.jkcredit.invoice.hub.util;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.UUID;
+import java.util.*;
 
 /**
  * @description:
@@ -12,12 +11,26 @@ import java.util.UUID;
  * @version: V1.0
  **/
 public class CommonUtil {
+    // bigDecimal转double
     public static Double parseDouble(BigDecimal bigDecimal) {
         return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
     }
 
+    // 生成requestId
     public static String getRequestId() {
         return new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + ","
                 + UUID.randomUUID().toString();
     }
+
+    // 获取差集
+    public static List<Long> getSubtraction(Set<Long> primary, Set<Long> secondary) {
+        primary.removeAll(secondary);
+        return new ArrayList<>(primary);
+    }
+
+    // 获取交集
+    public static List<Long> getIntersection(Set<Long> primary, Set<Long> secondary) {
+        primary.retainAll(secondary);
+        return new ArrayList<>(primary);
+    }
 }

+ 5 - 15
src/main/resources/mapper/RolePermissionMapper.xml

@@ -11,23 +11,13 @@
         <result column="permission_name" property="permissionName"/>
     </resultMap>
 
-    <select id="getPermissions" resultType="java.lang.Long">
-        select * from
+    <select id="getPermissionIdByRoleId" resultType="java.lang.Long">
+        select permission_id from
             h_role_permission
         where
-            role_id = #{roleId}
+            role_id = #{roleId} and activated = 1
     </select>
-
-    <select id="getPermissionsByRoleId" resultMap="baseResultMap">
-        select
-            rolePermission.permission_id, h_permission.permission_name
-        from
-            h_role_permission rolePermission
-        left join
-            h_permission
-        on
-            rolePermission.permission_id = h_permission.id
-        where
-            role_id = #{roleId}
+    <select id="getPermissionByRoleId" resultMap="baseResultMap">
+        select * from h_role_permission where role_id = #{roleId} and activated = 1
     </select>
 </mapper>

+ 20 - 0
src/main/resources/mapper/UserRolePermissionMapper.xml

@@ -0,0 +1,20 @@
+<?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.jkcredit.invoice.hub.mapper.UserRolePermissionMapper">
+    <resultMap id="baseResultMap" type="com.jkcredit.invoice.hub.model.po.userRolePermission.UserRolePermissionPo">
+        <id column="id" property="id"/>
+        <result column="user_id" property="userId"/>
+        <result column="role_id" property="roleId"/>
+        <result column="permission_id" property="permissionId"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="activated" property="activated"/>
+    </resultMap>
+
+    <select id="getUserRolePermissionByRoleId" resultMap="baseResultMap">
+        select * from h_user_role_permission where role_id = #{roleId} and activated = 1
+    </select>
+    <select id="getUserIdByRoleId" resultType="java.lang.Long">
+        select distinct user_id from h_user_role_permission where role_id = #{roleId} and activated = 1
+    </select>
+</mapper>