wl
2022-10-26 3e194c0902c307b0cfa2ec14bf303310eb1fb6e9
解决用户权限问题
8个文件已修改
62 ■■■■ 已修改文件
ycl-common/src/main/java/com/ycl/bo/AdminUserDetails.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/user/UmsAdminCacheService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/user/UmsAdminService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminCacheServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/config/YclSecurityConfig.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/resources/mapper/caseHandler/DisposeRecordMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/bo/AdminUserDetails.java
@@ -1,7 +1,7 @@
package com.ycl.bo;
import com.ycl.entity.user.UmsAdmin;
import com.ycl.entity.user.UmsResource;
import com.ycl.entity.user.UmsMenu;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
@@ -15,8 +15,9 @@
 */
public class AdminUserDetails implements UserDetails {
    private UmsAdmin umsAdmin;
    private List<UmsResource> resourceList;
    public AdminUserDetails(UmsAdmin umsAdmin, List<UmsResource> resourceList) {
    private List<UmsMenu> resourceList;
    public AdminUserDetails(UmsAdmin umsAdmin, List<UmsMenu> resourceList) {
        this.umsAdmin = umsAdmin;
        this.resourceList = resourceList;
    }
@@ -25,7 +26,7 @@
    public Collection<? extends GrantedAuthority> getAuthorities() {
        //返回当前用户的角色
        return resourceList.stream()
                .map(role ->new SimpleGrantedAuthority(role.getId()+":"+role.getName()))
                .map(role -> new SimpleGrantedAuthority(role.getId() + ":" + role.getTitle()))
                .collect(Collectors.toList());
    }
@@ -59,7 +60,7 @@
        return umsAdmin.getStatus().equals(1);
    }
    public Long getUserId(){
    public Long getUserId() {
        return umsAdmin.getId();
    }
}
ycl-common/src/main/java/com/ycl/service/user/UmsAdminCacheService.java
@@ -4,6 +4,7 @@
import com.ycl.entity.user.UmsAdmin;
import com.ycl.entity.user.UmsMenu;
import com.ycl.entity.user.UmsResource;
import java.util.List;
@@ -50,12 +51,12 @@
    /**
     * 获取缓存后台用户资源列表
     */
    List<UmsResource> getResourceList(Long adminId);
    List<UmsMenu> getResourceList(Long adminId);
    /**
     * 设置后台后台用户资源列表
     */
    void setResourceList(Long adminId, List<UmsResource> resourceList);
    void setResourceList(Long adminId, List<UmsMenu> umsMenuList);
    /**
     * 批量删除缓存用户
ycl-common/src/main/java/com/ycl/service/user/UmsAdminService.java
@@ -6,6 +6,7 @@
import com.ycl.dto.UmsAdminParam;
import com.ycl.dto.UpdateAdminPasswordParam;
import com.ycl.entity.user.UmsAdmin;
import com.ycl.entity.user.UmsMenu;
import com.ycl.entity.user.UmsResource;
import com.ycl.entity.user.UmsRole;
import com.ycl.vo.user.UserVO;
@@ -72,7 +73,7 @@
    /**
     * 获取指定用户的可访问资源
     */
    List<UmsResource> getResourceList(Long adminId);
    List<UmsMenu> getResourceList(Long adminId);
    /**
     * 修改密码
ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminCacheServiceImpl.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ycl.entity.user.UmsAdmin;
import com.ycl.entity.user.UmsAdminRoleRelation;
import com.ycl.entity.user.UmsMenu;
import com.ycl.entity.user.UmsResource;
import com.ycl.mapper.user.UmsAdminMapper;
import com.ycl.service.redis.RedisService;
@@ -106,18 +107,18 @@
    }
    @Override
    public List<UmsResource> getResourceList(Long adminId) {
    public List<UmsMenu> getResourceList(Long adminId) {
        String key = REDIS_DATABASE + ":" + REDIS_KEY_RESOURCE_LIST + ":" + adminId;
        String s = (String) redisService.get(key);
//        return (List<UmsResource>) redisService.get(key);
        List<UmsResource> umsResources = JSON.parseArray(s, UmsResource.class);
        List<UmsMenu> umsResources = JSON.parseArray(s, UmsMenu.class);
        return umsResources;
    }
    @Override
    public void setResourceList(Long adminId, List<UmsResource> resourceList) {
    public void setResourceList(Long adminId, List<UmsMenu> menuList) {
        String key = REDIS_DATABASE + ":" + REDIS_KEY_RESOURCE_LIST + ":" + adminId;
        redisService.set(key, JSON.toJSONString(resourceList), REDIS_EXPIRE);
        redisService.set(key, JSON.toJSONString(menuList), REDIS_EXPIRE);
    }
    @Override
ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java
@@ -288,16 +288,14 @@
    }
    @Override
    public List<UmsResource> getResourceList(Long adminId) {
        List<UmsResource> resourceList = getCacheService().getResourceList(adminId);
        if (CollUtil.isNotEmpty(resourceList)) {
            return resourceList;
    public List<UmsMenu> getResourceList(Long adminId) {
        List<UmsMenu> umsMenuList = getCacheService().getResourceList(adminId);
        if (CollUtil.isNotEmpty(umsMenuList)) {
            return umsMenuList;
        }
        resourceList = umsResourceMapper.getResourceList(adminId);
        if (CollUtil.isNotEmpty(resourceList)) {
            getCacheService().setResourceList(adminId, resourceList);
        }
        return resourceList;
        umsMenuList = umsMenuMapper.getMenuList(adminId);
            getCacheService().setResourceList(adminId, umsMenuList);
        return umsMenuList;
    }
    @Override
@@ -328,7 +326,7 @@
        //获取用户信息
        UmsAdmin admin = getAdminByUsername(username);
        if (admin != null) {
            List<UmsResource> resourceList = getResourceList(admin.getId());
            List<UmsMenu> resourceList = getResourceList(admin.getId());
            return new AdminUserDetails(admin, resourceList);
        }
        throw new UsernameNotFoundException("用户名或密码错误");
ycl-platform/src/main/java/com/ycl/config/YclSecurityConfig.java
@@ -1,8 +1,10 @@
package com.ycl.config;
import com.ycl.component.DynamicSecurityService;
import com.ycl.entity.user.UmsMenu;
import com.ycl.entity.user.UmsResource;
import com.ycl.service.user.UmsAdminService;
import com.ycl.service.user.UmsMenuService;
import com.ycl.service.user.UmsResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -24,7 +26,7 @@
    @Autowired
    private UmsAdminService adminService;
    @Autowired
    private UmsResourceService resourceService;
    private UmsMenuService umsMenuService;
    @Bean
    public UserDetailsService userDetailsService() {
@@ -38,9 +40,9 @@
            @Override
            public Map<String, ConfigAttribute> loadDataSource() {
                Map<String, ConfigAttribute> map = new ConcurrentHashMap<>();
                List<UmsResource> resourceList = resourceService.list();
                for (UmsResource resource : resourceList) {
                    map.put(resource.getUrl(), new org.springframework.security.access.SecurityConfig(resource.getId() + ":" + resource.getName()));
                List<UmsMenu> resourceList = umsMenuService.list();
                for (UmsMenu resource : resourceList) {
                    map.put(resource.getTitle(), new org.springframework.security.access.SecurityConfig(resource.getId() + ":" + resource.getTitle()));
                }
                return map;
            }
ycl-platform/src/main/resources/application.yml
@@ -36,7 +36,7 @@
  database: sccg
  key:
    admin: 'ums:admin'
    resourceList: 'ums:resourceList'
    resourceList: 'ums:menuList'
  expire:
    common: 86400 # 24小时
ycl-platform/src/main/resources/mapper/caseHandler/DisposeRecordMapper.xml
@@ -33,8 +33,8 @@
        t2.limit_time
        FROM
        ums_admin_role_relation t1
        JOIN ums_dispose_record t2 ON t1.role_id = t2.handler_role_id
        JOIN ums_base_case t3 ON t2.base_case_id=t3.id
        left JOIN ums_dispose_record t2 ON t1.role_id = t2.handler_role_id
        left JOIN ums_base_case t3 ON t2.base_case_id=t3.id
        <where>
            t1.admin_id = #{id}
            AND ISNULL( t2.end_time )