mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 04:08:43 +08:00 
			
		
		
		
	调整 SecurityPermissionFrameworkService 的实现,完善 PermissionServiceTest 的单元测试
This commit is contained in:
		@@ -1,5 +1,6 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.api.permission;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
@@ -23,4 +24,19 @@ public class PermissionApiImpl implements PermissionApi {
 | 
			
		||||
        return permissionService.getUserRoleIdListByRoleIds(roleIds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean hasAnyPermissions(Long userId, String... permissions) {
 | 
			
		||||
        return permissionService.hasAnyPermissions(userId, permissions);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean hasAnyRoles(Long userId, String... roles) {
 | 
			
		||||
        return permissionService.hasAnyRoles(userId, roles);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public DeptDataPermissionRespDTO getDeptDataPermission(Long userId) {
 | 
			
		||||
        return permissionService.getDeptDataPermission(userId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.framework.datapermission.config;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 | 
			
		||||
import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRuleCustomizer;
 | 
			
		||||
import cn.iocoder.yudao.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
package cn.iocoder.yudao.module.system.service.permission;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.framework.datapermission.core.dept.service.DeptDataPermissionFrameworkService;
 | 
			
		||||
import cn.iocoder.yudao.framework.security.core.service.SecurityPermissionFrameworkService;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
 | 
			
		||||
import org.springframework.lang.Nullable;
 | 
			
		||||
 | 
			
		||||
@@ -16,7 +15,7 @@ import java.util.Set;
 | 
			
		||||
 *
 | 
			
		||||
 * @author 芋道源码
 | 
			
		||||
 */
 | 
			
		||||
public interface PermissionService extends SecurityPermissionFrameworkService, DeptDataPermissionFrameworkService {
 | 
			
		||||
public interface PermissionService {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 初始化权限的本地缓存
 | 
			
		||||
@@ -115,4 +114,29 @@ public interface PermissionService extends SecurityPermissionFrameworkService, D
 | 
			
		||||
     */
 | 
			
		||||
    void processUserDeleted(Long userId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 判断是否有权限,任一一个即可
 | 
			
		||||
     *
 | 
			
		||||
     * @param userId 用户编号
 | 
			
		||||
     * @param permissions 权限
 | 
			
		||||
     * @return 是否
 | 
			
		||||
     */
 | 
			
		||||
    boolean hasAnyPermissions(Long userId, String... permissions);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 判断是否有角色,任一一个即可
 | 
			
		||||
     *
 | 
			
		||||
     * @param roles 角色数组
 | 
			
		||||
     * @return 是否
 | 
			
		||||
     */
 | 
			
		||||
    boolean hasAnyRoles(Long userId, String... roles);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得登陆用户的部门数据权限
 | 
			
		||||
     *
 | 
			
		||||
     * @param userId 用户编号
 | 
			
		||||
     * @return 部门数据权限
 | 
			
		||||
     */
 | 
			
		||||
    DeptDataPermissionRespDTO getDeptDataPermission(Long userId);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 | 
			
		||||
import cn.iocoder.yudao.framework.datapermission.core.dept.service.dto.DeptDataPermissionRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 | 
			
		||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
 | 
			
		||||
@@ -45,7 +45,6 @@ import java.util.function.Supplier;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getMaxValue;
 | 
			
		||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 | 
			
		||||
import static java.util.Collections.singleton;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -53,7 +52,7 @@ import static java.util.Collections.singleton;
 | 
			
		||||
 *
 | 
			
		||||
 * @author 芋道源码
 | 
			
		||||
 */
 | 
			
		||||
@Service("ss") // 使用 Spring Security 的缩写,方便食用
 | 
			
		||||
@Service
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class PermissionServiceImpl implements PermissionService {
 | 
			
		||||
 | 
			
		||||
@@ -71,7 +70,7 @@ public class PermissionServiceImpl implements PermissionService {
 | 
			
		||||
     * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
 | 
			
		||||
     */
 | 
			
		||||
    @Getter
 | 
			
		||||
    @Setter // 单元测试
 | 
			
		||||
    @Setter // 单元测试需要
 | 
			
		||||
    private volatile Multimap<Long, Long> roleMenuCache;
 | 
			
		||||
    /**
 | 
			
		||||
     * 菜单编号与角色编号的缓存映射
 | 
			
		||||
@@ -81,6 +80,7 @@ public class PermissionServiceImpl implements PermissionService {
 | 
			
		||||
     * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
 | 
			
		||||
     */
 | 
			
		||||
    @Getter
 | 
			
		||||
    @Setter // 单元测试需要
 | 
			
		||||
    private volatile Multimap<Long, Long> menuRoleCache;
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存 RoleMenu 的最大更新时间,用于后续的增量轮询,判断是否有更新
 | 
			
		||||
@@ -399,19 +399,14 @@ public class PermissionServiceImpl implements PermissionService {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean hasPermission(String permission) {
 | 
			
		||||
        return hasAnyPermissions(permission);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean hasAnyPermissions(String... permissions) {
 | 
			
		||||
    public boolean hasAnyPermissions(Long userId, String... permissions) {
 | 
			
		||||
        // 如果为空,说明已经有权限
 | 
			
		||||
        if (ArrayUtil.isEmpty(permissions)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 获得当前登录的角色。如果为空,说明没有权限
 | 
			
		||||
        Set<Long> roleIds = getUserRoleIdsFromCache(getLoginUserId(), singleton(CommonStatusEnum.ENABLE.getStatus()));
 | 
			
		||||
        Set<Long> roleIds = getUserRoleIdsFromCache(userId, singleton(CommonStatusEnum.ENABLE.getStatus()));
 | 
			
		||||
        if (CollUtil.isEmpty(roleIds)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
@@ -434,19 +429,14 @@ public class PermissionServiceImpl implements PermissionService {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean hasRole(String role) {
 | 
			
		||||
        return hasAnyRoles(role);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean hasAnyRoles(String... roles) {
 | 
			
		||||
    public boolean hasAnyRoles(Long userId, String... roles) {
 | 
			
		||||
        // 如果为空,说明已经有权限
 | 
			
		||||
        if (ArrayUtil.isEmpty(roles)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 获得当前登录的角色。如果为空,说明没有权限
 | 
			
		||||
        Set<Long> roleIds = getUserRoleIdsFromCache(getLoginUserId(), singleton(CommonStatusEnum.ENABLE.getStatus()));
 | 
			
		||||
        Set<Long> roleIds = getUserRoleIdsFromCache(userId, singleton(CommonStatusEnum.ENABLE.getStatus()));
 | 
			
		||||
        if (CollUtil.isEmpty(roleIds)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user