浏览代码

角色授权回显bugfix

chao 3 年之前
父节点
当前提交
9d7fd56221

+ 8 - 0
src/main/java/com/caimei365/manager/dao/SystemDao.java

@@ -102,6 +102,10 @@ public interface SystemDao {
      * 根据角色ID获取菜单Ids
      */
     List<Integer> getMenuIdsByRoleId(Integer roleId);
+    /**
+     * 根据角色ID获取(权限-菜单)Ids
+     */
+    List<String> getPermissionMenuIdsByRoleId(Integer roleId);
     /**
      * 保存角色菜单关系
      */
@@ -114,6 +118,10 @@ public interface SystemDao {
      * 删除原有角色菜单关联
      */
     void deleteRoleMenuRelation(Integer roleId);
+    /**
+     * 删除原有角色权限关联
+     */
+    void deleteRolePermissionRelation(Integer roleId);
 
     /**
      * 获取菜单列表

+ 13 - 1
src/main/java/com/caimei365/manager/service/sys/impl/SysRoleServiceImpl.java

@@ -52,7 +52,13 @@ public class SysRoleServiceImpl implements SysRoleService {
             // 根据角色ID获取菜单Ids
             List<Integer> menuIdList = systemDao.getMenuIdsByRoleId(id);
             String menuIds = CommonUtil.idListToString(menuIdList, ",");
-            sysRole.setMenuIds(menuIds);
+            // 根据角色ID获取(权限-菜单)Ids
+            List<String> permissionIdList = systemDao.getPermissionMenuIdsByRoleId(id);
+            StringBuilder ids = new StringBuilder(menuIds);
+            for (String permissionId : permissionIdList) {
+                ids.append(",").append(permissionId);
+            }
+            sysRole.setMenuIds(ids.toString());
         }
         return ResponseJson.success(sysRole);
     }
@@ -113,6 +119,8 @@ public class SysRoleServiceImpl implements SysRoleService {
     public ResponseJson<Void> deleteRole(Integer id) {
         // 删除角色菜单关联
         systemDao.deleteRoleMenuRelation(id);
+        // 删除原有角色权限关联
+        systemDao.deleteRolePermissionRelation(id);
         // 删除角色
         systemDao.deleteRole(id);
         return ResponseJson.success();
@@ -136,6 +144,10 @@ public class SysRoleServiceImpl implements SysRoleService {
      */
     private void saveRoleMenuRelation(Integer roleId, String menuIds) {
         if (StringUtils.hasLength(menuIds)) {
+            // 删除原有角色菜单关联
+            systemDao.deleteRoleMenuRelation(roleId);
+            // 删除原有角色权限关联
+            systemDao.deleteRolePermissionRelation(roleId);
             // 设置角色菜单
             String[] split = menuIds.split(",");
             for (String s : split) {

+ 9 - 1
src/main/resources/mapper/SystemDao.xml

@@ -85,6 +85,11 @@
     <select id="getMenuIdsByRoleId" resultType="java.lang.Integer">
         SELECT DISTINCT menu_id FROM system_role_menu WHERE role_id = #{roleId}
     </select>
+    <select id="getPermissionMenuIdsByRoleId" resultType="java.lang.String">
+        SELECT DISTINCT CONCAT(p.id, '-', p.menu_id) FROM system_permission p
+        LEFT JOIN system_role_permission srp on p.id = srp.permission_id
+        WHERE srp.role_id = #{roleId}
+    </select>
     <insert id="insertRoleMenuRelation">
         INSERT INTO system_role_menu(role_id, menu_id) VALUES(#{roleId}, #{menuId})
     </insert>
@@ -94,6 +99,9 @@
     <delete id="deleteRoleMenuRelation">
         DELETE FROM system_role_menu WHERE role_id = #{roleId}
     </delete>
+    <delete id="deleteRolePermissionRelation">
+        DELETE FROM system_role_permission WHERE role_id = #{roleId}
+    </delete>
     <update id="updateRole">
         UPDATE system_role SET role_name=#{roleName}, role_desc=#{roleDesc}, del_flag=#{delFlag}, update_time=NOW()
         WHERE id = #{id}
@@ -112,7 +120,7 @@
         ORDER BY m.sort
     </select>
     <select id="getPermissionNames" resultType="java.lang.String">
-        SELECT p.name FROM system_permission p
+        SELECT DISTINCT p.name FROM system_permission p
         LEFT JOIN system_role_permission rp ON p.id = rp.permission_id
         WHERE rp.role_id IN
         <foreach item="roleId" collection="roleIds" open="(" separator="," close=")">