chenw 7 سال پیش
والد
کامیت
1ac07b9f1b

+ 34 - 0
base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/OtherPowerDTO.java

@@ -0,0 +1,34 @@
+package com.usoftchina.saas.account.dto;
+
+import java.io.Serializable;
+
+public class OtherPowerDTO implements Serializable {
+
+    private Long resourceId;
+    private String name;
+    private boolean checked;
+
+    public boolean isChecked() {
+        return checked;
+    }
+
+    public void setChecked(boolean checked) {
+        this.checked = checked;
+    }
+
+    public Long getResourceId() {
+        return resourceId;
+    }
+
+    public void setResourceId(Long resourceId) {
+        this.resourceId = resourceId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 123 - 0
base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/PowerDTO.java

@@ -0,0 +1,123 @@
+package com.usoftchina.saas.account.dto;
+
+import java.util.List;
+
+public class PowerDTO {
+    private Long groupId;
+    private String moduleName;
+    private String groupName;
+    private boolean query;
+    private boolean add;
+    private boolean update;
+    private boolean delete;
+    private boolean audit;
+    private boolean unAudit;
+    private boolean print;
+    private boolean fileExport;
+    private boolean fileImport;
+    private List<OtherPowerDTO> other;
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getGroupName() {
+        return groupName;
+    }
+
+    public void setGroupName(String groupName) {
+        this.groupName = groupName;
+    }
+
+    public String getModuleName() {
+        return moduleName;
+    }
+
+    public void setModuleName(String moduleName) {
+        this.moduleName = moduleName;
+    }
+
+    public boolean getQuery() {
+        return query;
+    }
+
+    public void setQuery(boolean query) {
+        this.query = query;
+    }
+
+    public boolean getAdd() {
+        return add;
+    }
+
+    public void setAdd(boolean add) {
+        this.add = add;
+    }
+
+    public boolean getUpdate() {
+        return update;
+    }
+
+    public void setUpdate(boolean update) {
+        this.update = update;
+    }
+
+    public boolean getDelete() {
+        return delete;
+    }
+
+    public void setDelete(boolean delete) {
+        this.delete = delete;
+    }
+
+    public boolean getAudit() {
+        return audit;
+    }
+
+    public void setAudit(boolean audit) {
+        this.audit = audit;
+    }
+
+    public boolean getUnAudit() {
+        return unAudit;
+    }
+
+    public void setUnAudit(boolean unAudit) {
+        this.unAudit = unAudit;
+    }
+
+    public boolean getPrint() {
+        return print;
+    }
+
+    public void setPrint(boolean print) {
+        this.print = print;
+    }
+
+    public boolean getFileExport() {
+        return fileExport;
+    }
+
+    public void setFileExport(boolean fileExport) {
+        this.fileExport = fileExport;
+    }
+
+    public boolean getFileImport() {
+        return fileImport;
+    }
+
+    public void setFileImport(boolean fileImport) {
+        this.fileImport = fileImport;
+    }
+
+    public List<OtherPowerDTO> getOther() {
+        return other;
+    }
+
+    public void setOther(List<OtherPowerDTO> other) {
+        this.other = other;
+    }
+}

+ 5 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/RoleController.java

@@ -130,6 +130,11 @@ public class RoleController {
         return Result.success();
     }
 
+    @GetMapping("/power/resource")
+    public Result getResourcePower(Long id){
+        return Result.success(roleService.getResourcePowerById(id));
+    }
+
     /**
      * 清除角色相关所有账户的缓存
      *

+ 7 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/ResourceMapper.java

@@ -42,4 +42,11 @@ public interface ResourceMapper {
      * @return
      */
     Resource selectByPrimaryKey(@Param("id") Long id);
+
+    /**
+     * 按资源组查找Classify
+     * @param id
+     * @return
+     */
+    List<String> selectClassifyByGroupId(@Param("id") Long id);
 }

+ 15 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/RoleResourceMapper.java

@@ -1,9 +1,11 @@
 package com.usoftchina.saas.account.mapper;
 
+import com.usoftchina.saas.account.po.OtherPower;
 import com.usoftchina.saas.account.po.RoleResource;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author yingp
@@ -53,4 +55,17 @@ public interface RoleResourceMapper {
      * @return
      */
     List<RoleResource> selectByAccountId(@Param("accountId") Long accountId);
+
+    /**
+     * 按角色ID查找角色绑定的资源Classify
+     * @param id
+     */
+    List<Map<String, Object>> selectClassifyByRoleId(@Param("id") Long id);
+
+    /**
+     * 通过资源groupId和角色ID查询 角色是否具有改资源的权限
+     * @param roleId
+     * @return
+     */
+    List<OtherPower> selectOthersPower(@Param("roleId") Long roleId);
 }

+ 43 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/po/OtherPower.java

@@ -0,0 +1,43 @@
+package com.usoftchina.saas.account.po;
+
+import java.io.Serializable;
+
+public class OtherPower implements Serializable {
+
+    private Long resourceId;
+    private String name;
+    private boolean checked;
+    private Long groupId;
+
+    public Long getResourceId() {
+        return resourceId;
+    }
+
+    public void setResourceId(Long resourceId) {
+        this.resourceId = resourceId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public boolean isChecked() {
+        return checked;
+    }
+
+    public void setChecked(boolean checked) {
+        this.checked = checked;
+    }
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+}

+ 1 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/ResourceService.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.account.service;
 
+import com.usoftchina.saas.account.dto.ResourceGroupDTO;
 import com.usoftchina.saas.account.dto.ResourceModuleDTO;
 import com.usoftchina.saas.account.dto.UrlResourceDTO;
 import com.usoftchina.saas.account.po.Resource;

+ 8 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/RoleService.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.account.service;
 
+import com.usoftchina.saas.account.dto.PowerDTO;
 import com.usoftchina.saas.account.dto.RoleBaseDTO;
 import com.usoftchina.saas.account.mapper.RoleMapper;
 import com.usoftchina.saas.account.po.Role;
@@ -36,4 +37,11 @@ public interface RoleService extends CommonBaseService<RoleMapper, Role> {
      * @return
      */
     List<RoleBaseDTO> findByAccountId(Long accountId);
+
+    /**
+     * 查找用户权限
+     * @param id
+     * @return
+     */
+    List<PowerDTO> getResourcePowerById(Long id);
 }

+ 97 - 5
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/RoleServiceImpl.java

@@ -1,15 +1,15 @@
 package com.usoftchina.saas.account.service.impl;
 
 import com.usoftchina.saas.account.constant.RoleType;
+import com.usoftchina.saas.account.dto.OtherPowerDTO;
+import com.usoftchina.saas.account.dto.PowerDTO;
 import com.usoftchina.saas.account.dto.RoleBaseDTO;
-import com.usoftchina.saas.account.mapper.AccountRoleMapper;
-import com.usoftchina.saas.account.mapper.RoleMapper;
-import com.usoftchina.saas.account.mapper.RoleResourceMapper;
-import com.usoftchina.saas.account.po.Resource;
-import com.usoftchina.saas.account.po.Role;
+import com.usoftchina.saas.account.mapper.*;
+import com.usoftchina.saas.account.po.*;
 import com.usoftchina.saas.account.service.ResourceService;
 import com.usoftchina.saas.account.service.RoleService;
 import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
+import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.utils.BeanMapper;
 import com.usoftchina.saas.utils.CollectionUtils;
 import com.usoftchina.saas.utils.StringUtils;
@@ -18,7 +18,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author yingp
@@ -38,6 +40,15 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
     @Autowired
     private ResourceService resourceService;
 
+    @Autowired
+    private ResourceModuleMapper resourceModuleMapper;
+
+    @Autowired
+    private ResourceGroupMapper resourceGroupMapper;
+
+    @Autowired
+    private ResourceMapper resourceMapper;
+
     @Override
     public boolean save(Role role) {
         if (StringUtils.isEmpty(role.getCode())) {
@@ -78,4 +89,85 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
         }
         return null;
     }
+
+    @Override
+    public List<PowerDTO> getResourcePowerById(Long id) {
+        List<PowerDTO> powerDTOList = new ArrayList<PowerDTO>();
+        List<Map<String, Object>> classifyList = roleResourceMapper.selectClassifyByRoleId(id);
+        List<OtherPower> otherPowerList = roleResourceMapper.selectOthersPower(id);
+        //查询所有模块
+        List<ResourceModule> modules = resourceModuleMapper.selectByAppId(BaseContextHolder.getAppId());
+        for (ResourceModule module : modules){
+            //查询所有分组
+            List<ResourceGroup> groups = resourceGroupMapper.selectByModuleId(module.getId());
+            for (ResourceGroup group : groups) {
+                PowerDTO powerDTO = new PowerDTO();
+                powerDTO.setGroupId(group.getId());
+                powerDTO.setModuleName(module.getName());
+                powerDTO.setGroupName(group.getName());
+                //赋值权限
+                for (Map<String, Object> map : classifyList){
+                    if (group.getId().equals(map.get("group_id"))){
+                        String classify = String.valueOf(map.get("classify"));
+                        setPowerValue(powerDTO, classify);
+                        if (classify.contains("OTHER")){
+                            setOtherPower(powerDTO, group.getId(), otherPowerList);
+                        }
+                    }
+                }
+                powerDTOList.add(powerDTO);
+            }
+        }
+        return powerDTOList;
+    }
+
+    private void setOtherPower(PowerDTO powerDTO, Long groupId, List<OtherPower> otherPowerList) {
+        List<OtherPower> otherPowers = new ArrayList<OtherPower>();
+        for (OtherPower otherPower : otherPowerList){
+            if (otherPower.getGroupId().equals(groupId)){
+                otherPowers.add(otherPower);
+            }
+        }
+        List<OtherPowerDTO> otherPowerDTOList = BeanMapper.mapList(otherPowers, OtherPowerDTO.class);
+        powerDTO.setOther(otherPowerDTOList);
+    }
+
+    private void setPowerValue(PowerDTO powerDTO, String classify) {
+        String[] array = classify.split(",");
+        for(int i = 0; i < array.length; i++){
+            switch (array[i]){
+                case "QUERY":
+                    powerDTO.setQuery(true);
+                    break;
+                case "ADD":
+                    powerDTO.setAdd(true);
+                    break;
+                case "UPDATE":
+                    powerDTO.setUpdate(true);
+                    break;
+                case "AUDIT":
+                    powerDTO.setAudit(true);
+                    break;
+                case "UNAUDIT":
+                    powerDTO.setUnAudit(true);
+                    break;
+                case "DELETE":
+                    powerDTO.setDelete(true);
+                    break;
+                case "PRINT":
+                    powerDTO.setPrint(true);
+                    break;
+                case "EXPORT":
+                    powerDTO.setFileExport(true);
+                    break;
+                case "IMPORT":
+                    powerDTO.setFileImport(true);
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+
+
 }

+ 3 - 0
base-servers/account/account-server/src/main/resources/mapper/ResourceMapper.xml

@@ -29,4 +29,7 @@
     <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
         select <include refid="baseColumns"/> from ac_resource where id=#{id,jdbcType=BIGINT}
     </select>
+    <select id="selectClassifyByGroupId" parameterType="java.lang.Long" resultType="string">
+        SELECT DISTINCT CLASSIFY FROM AC_RESOURCE WHERE ID=#{id,jdbcType=BIGINT}
+    </select>
 </mapper>

+ 18 - 0
base-servers/account/account-server/src/main/resources/mapper/RoleResourceMapper.xml

@@ -24,4 +24,22 @@
         where ac_account_role.role_id=ac_role_resource.role_id
         and ac_account_role.account_id=#{accountId,jdbcType=BIGINT}
     </select>
+    <select id="selectClassifyByRoleId" parameterType="java.lang.Long" resultType="java.util.HashMap">
+        SELECT GROUP_CONCAT(classify) classify,group_id FROM (
+          SELECT classify,group_id FROM AC_RESOURCE
+          WHERE ID IN (SELECT RESOURCE_ID FROM AC_ROLE_RESOURCE WHERE ROLE_ID=#{id})
+          GROUP BY GROUP_ID,CLASSIFY) A
+        GROUP BY GROUP_ID
+    </select>
+    <resultMap id="OtherPowerResultMap" type="com.usoftchina.saas.account.po.OtherPower">
+        <result column="name" property="name" jdbcType="VARCHAR" />
+        <result column="id" property="resourceId" jdbcType="BIGINT" />
+        <result column="group_id" property="groupId" jdbcType="BIGINT" />
+        <result column="checked" property="checked" jdbcType="BOOLEAN" />
+    </resultMap>
+    <select id="selectOthersPower" resultMap="OtherPowerResultMap">
+      SELECT name,id,group_id,CASE WHEN ROLE_ID IS NULL THEN false ELSE true end checked FROM AC_RESOURCE
+      LEFT JOIN ac_role_resource ON ID = RESOURCE_ID
+      WHERE CLASSIFY='OTHER' AND ROLE_ID=#{roleId}
+    </select>
 </mapper>

+ 1 - 0
base-servers/auth/auth-client/src/main/java/com/usoftchina/saas/auth/client/interceptor/AuthRestInterceptor.java

@@ -42,6 +42,7 @@ public class AuthRestInterceptor extends HandlerInterceptorAdapter {
                 JwtInfo infoFromToken = JwtHelper.getInfoFromToken(token, authConfig.getPublicKey());
                 BaseContextHolder.setAppId(infoFromToken.getAppId());
                 BaseContextHolder.setUserId(infoFromToken.getUserId());
+                BaseContextHolder.setUserName(infoFromToken.getUserName());
                 BaseContextHolder.setCompanyId(infoFromToken.getCompanyId());
                 BaseContextHolder.setToken(token);
                 log.info("request={} token={} \\r\\n userName={}", request.getRequestURI(),