diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemotePermissionService.java b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemotePermissionService.java new file mode 100644 index 00000000..2a815a2e --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemotePermissionService.java @@ -0,0 +1,28 @@ +package org.dromara.system.api; + +import java.util.Set; + +/** + * 用户权限处理 + * + * @author Lion Li + */ +public interface RemotePermissionService { + + /** + * 获取角色数据权限 + * + * @param userId 用户id + * @return 角色权限信息 + */ + Set getRolePermission(Long userId); + + /** + * 获取菜单数据权限 + * + * @param userId 用户id + * @return 菜单权限信息 + */ + Set getMenuPermission(Long userId); + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/PermissionService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/PermissionService.java new file mode 100644 index 00000000..d7db79a9 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/PermissionService.java @@ -0,0 +1,28 @@ +package org.dromara.common.core.service; + +import java.util.Set; + +/** + * 用户权限处理 + * + * @author Lion Li + */ +public interface PermissionService { + + /** + * 获取角色数据权限 + * + * @param userId 用户id + * @return 角色权限信息 + */ + Set getRolePermission(Long userId); + + /** + * 获取菜单数据权限 + * + * @param userId 用户id + * @return 菜单权限信息 + */ + Set getMenuPermission(Long userId); + +} diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java index 257922b0..0ff21e23 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java @@ -1,9 +1,13 @@ package org.dromara.common.satoken.core.service; import cn.dev33.satoken.stp.StpInterface; +import cn.hutool.core.util.ObjectUtil; import org.dromara.common.core.enums.UserType; +import org.dromara.common.core.service.PermissionService; +import org.dromara.common.core.utils.StringUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.api.model.LoginUser; +import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.List; @@ -15,19 +19,25 @@ import java.util.List; */ public class SaPermissionImpl implements StpInterface { + @Autowired + private PermissionService permissionService; + /** * 获取菜单权限列表 */ @Override public List getPermissionList(Object loginId, String loginType) { LoginUser loginUser = LoginHelper.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + List list = StringUtils.splitList(loginId.toString(), ":"); + return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(list.get(1)))); + } UserType userType = UserType.getUserType(loginUser.getUserType()); - if (userType == UserType.SYS_USER) { - return new ArrayList<>(loginUser.getMenuPermission()); - } else if (userType == UserType.APP_USER) { + if (userType == UserType.APP_USER) { // 其他端 自行根据业务编写 } - return new ArrayList<>(); + // SYS_USER 默认返回权限 + return new ArrayList<>(loginUser.getMenuPermission()); } /** @@ -36,12 +46,15 @@ public class SaPermissionImpl implements StpInterface { @Override public List getRoleList(Object loginId, String loginType) { LoginUser loginUser = LoginHelper.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + List list = StringUtils.splitList(loginId.toString(), ":"); + return new ArrayList<>(permissionService.getRolePermission(Long.parseLong(list.get(1)))); + } UserType userType = UserType.getUserType(loginUser.getUserType()); - if (userType == UserType.SYS_USER) { - return new ArrayList<>(loginUser.getRolePermission()); - } else if (userType == UserType.APP_USER) { + if (userType == UserType.APP_USER) { // 其他端 自行根据业务编写 } - return new ArrayList<>(); + // SYS_USER 默认返回权限 + return new ArrayList<>(loginUser.getRolePermission()); } } diff --git a/ruoyi-common/ruoyi-common-service-impl/src/main/java/org/dromara/common/core/service/impl/PermissionServiceImpl.java b/ruoyi-common/ruoyi-common-service-impl/src/main/java/org/dromara/common/core/service/impl/PermissionServiceImpl.java new file mode 100644 index 00000000..3ba632a7 --- /dev/null +++ b/ruoyi-common/ruoyi-common-service-impl/src/main/java/org/dromara/common/core/service/impl/PermissionServiceImpl.java @@ -0,0 +1,31 @@ +package org.dromara.common.core.service.impl; + +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.service.PermissionService; +import org.dromara.system.api.RemotePermissionService; +import org.springframework.stereotype.Service; + +import java.util.Set; + +/** + * 权限服务 + * + * @author Lion Li + */ +@Service +public class PermissionServiceImpl implements PermissionService { + + @DubboReference + private RemotePermissionService remotePermissionService; + + @Override + public Set getRolePermission(Long userId) { + return remotePermissionService.getRolePermission(userId); + } + + @Override + public Set getMenuPermission(Long userId) { + return remotePermissionService.getMenuPermission(userId); + } + +} diff --git a/ruoyi-common/ruoyi-common-service-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-service-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 0c39e3d6..8f7e6866 100644 --- a/ruoyi-common/ruoyi-common-service-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-common/ruoyi-common-service-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1,2 @@ org.dromara.common.core.service.impl.DictServiceImpl +org.dromara.common.core.service.impl.PermissionServiceImpl diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemotePermissionServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemotePermissionServiceImpl.java new file mode 100644 index 00000000..15776a12 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemotePermissionServiceImpl.java @@ -0,0 +1,32 @@ +package org.dromara.system.dubbo; + +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.service.PermissionService; +import org.dromara.system.service.ISysPermissionService; +import org.springframework.stereotype.Service; + +import java.util.Set; + +/** + * 权限服务 + * + * @author Lion Li + */ +@RequiredArgsConstructor +@Service +@DubboService +public class RemotePermissionServiceImpl implements PermissionService { + + private final ISysPermissionService permissionService; + + @Override + public Set getRolePermission(Long userId) { + return permissionService.getRolePermission(userId); + } + + @Override + public Set getMenuPermission(Long userId) { + return permissionService.getMenuPermission(userId); + } +}