mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	update 适配单体系与多体系用户权限
This commit is contained in:
		@@ -1,6 +1,5 @@
 | 
			
		||||
package com.ruoyi.common.utils;
 | 
			
		||||
 | 
			
		||||
import cn.dev33.satoken.stp.StpUtil;
 | 
			
		||||
import cn.hutool.http.HttpStatus;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.service.IUserService;
 | 
			
		||||
@@ -11,29 +10,23 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 | 
			
		||||
/**
 | 
			
		||||
 * 安全服务工具类
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 * @author Long Li
 | 
			
		||||
 */
 | 
			
		||||
public class SecurityUtils
 | 
			
		||||
{
 | 
			
		||||
public class SecurityUtils {
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户ID
 | 
			
		||||
     **/
 | 
			
		||||
    public static Long getUserId()
 | 
			
		||||
    {
 | 
			
		||||
        return StpUtil.getLoginIdAsLong();
 | 
			
		||||
    public static Long getUserId() {
 | 
			
		||||
        return LoginUtils.getUserId();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取部门ID
 | 
			
		||||
     **/
 | 
			
		||||
    public static Long getDeptId()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
    public static Long getDeptId() {
 | 
			
		||||
        try {
 | 
			
		||||
            return getUser().getDeptId();
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            throw new ServiceException("获取部门ID异常", HttpStatus.HTTP_UNAUTHORIZED);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -41,14 +34,10 @@ public class SecurityUtils
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取用户账户
 | 
			
		||||
     **/
 | 
			
		||||
    public static String getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
    public static String getUsername() {
 | 
			
		||||
        try {
 | 
			
		||||
            return getUser().getUserName();
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            throw new ServiceException("获取用户账户异常", HttpStatus.HTTP_UNAUTHORIZED);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -56,14 +45,10 @@ public class SecurityUtils
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取用户
 | 
			
		||||
     **/
 | 
			
		||||
    public static SysUser getUser()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
    public static SysUser getUser() {
 | 
			
		||||
        try {
 | 
			
		||||
            return SpringUtils.getBean(IUserService.class).selectUserById(getUserId());
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            throw new ServiceException("获取用户信息异常", HttpStatus.HTTP_UNAUTHORIZED);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -74,8 +59,7 @@ public class SecurityUtils
 | 
			
		||||
     * @param password 密码
 | 
			
		||||
     * @return 加密字符串
 | 
			
		||||
     */
 | 
			
		||||
    public static String encryptPassword(String password)
 | 
			
		||||
    {
 | 
			
		||||
    public static String encryptPassword(String password) {
 | 
			
		||||
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 | 
			
		||||
        return passwordEncoder.encode(password);
 | 
			
		||||
    }
 | 
			
		||||
@@ -83,12 +67,11 @@ public class SecurityUtils
 | 
			
		||||
    /**
 | 
			
		||||
     * 判断密码是否相同
 | 
			
		||||
     *
 | 
			
		||||
     * @param rawPassword 真实密码
 | 
			
		||||
     * @param rawPassword     真实密码
 | 
			
		||||
     * @param encodedPassword 加密后字符
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public static boolean matchesPassword(String rawPassword, String encodedPassword)
 | 
			
		||||
    {
 | 
			
		||||
    public static boolean matchesPassword(String rawPassword, String encodedPassword) {
 | 
			
		||||
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 | 
			
		||||
        return passwordEncoder.matches(rawPassword, encodedPassword);
 | 
			
		||||
    }
 | 
			
		||||
@@ -99,8 +82,7 @@ public class SecurityUtils
 | 
			
		||||
     * @param userId 用户ID
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public static boolean isAdmin(Long userId)
 | 
			
		||||
    {
 | 
			
		||||
    public static boolean isAdmin(Long userId) {
 | 
			
		||||
        return userId != null && 1L == userId;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,9 @@ import cn.dev33.satoken.stp.StpUtil;
 | 
			
		||||
import com.ruoyi.common.constant.Constants;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.service.LogininforService;
 | 
			
		||||
import com.ruoyi.common.enums.DeviceType;
 | 
			
		||||
import com.ruoyi.common.enums.UserStatus;
 | 
			
		||||
import com.ruoyi.common.enums.UserType;
 | 
			
		||||
import com.ruoyi.common.exception.ServiceException;
 | 
			
		||||
import com.ruoyi.common.exception.user.CaptchaException;
 | 
			
		||||
import com.ruoyi.common.exception.user.CaptchaExpireException;
 | 
			
		||||
@@ -72,7 +74,7 @@ public class SysLoginService {
 | 
			
		||||
		asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request);
 | 
			
		||||
        recordLoginInfo(user.getUserId());
 | 
			
		||||
        // 生成token
 | 
			
		||||
        StpUtil.login(user.getUserId(), "PC");
 | 
			
		||||
        LoginUtils.loginByDevice(user.getUserId(), UserType.SYS_USER, DeviceType.PC);
 | 
			
		||||
        return StpUtil.getTokenValue();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,8 @@ package com.ruoyi.system.service.impl;
 | 
			
		||||
 | 
			
		||||
import cn.dev33.satoken.stp.StpInterface;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.enums.UserType;
 | 
			
		||||
import com.ruoyi.common.utils.LoginUtils;
 | 
			
		||||
import com.ruoyi.system.service.ISysUserService;
 | 
			
		||||
import com.ruoyi.system.service.SysPermissionService;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
@@ -21,16 +23,30 @@ public class SaInterfaceImpl implements StpInterface {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<String> getPermissionList(Object loginId, String loginType) {
 | 
			
		||||
        SysUser user = iSysUserService.getById(loginId.toString());
 | 
			
		||||
        Set<String> menuPermission = sysPermissionService.getMenuPermission(user);
 | 
			
		||||
        //采用的是用户里自带的权限,实现一次性访问reids,进行判断是否可以访问
 | 
			
		||||
        return new ArrayList<>(menuPermission);
 | 
			
		||||
        UserType userType = LoginUtils.getUserType(loginId);
 | 
			
		||||
        if (userType == UserType.SYS_USER) {
 | 
			
		||||
            Long userId = LoginUtils.getUserId();
 | 
			
		||||
            SysUser user = iSysUserService.getById(userId);
 | 
			
		||||
            Set<String> menuPermission = sysPermissionService.getMenuPermission(user);
 | 
			
		||||
            //采用的是用户里自带的权限,实现一次性访问reids,进行判断是否可以访问
 | 
			
		||||
            return new ArrayList<>(menuPermission);
 | 
			
		||||
        } else if (userType == UserType.APP_USER) {
 | 
			
		||||
            // app端权限返回 自行根据业务编写
 | 
			
		||||
        }
 | 
			
		||||
        return new ArrayList<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<String> getRoleList(Object loginId, String loginType) {
 | 
			
		||||
        SysUser user = iSysUserService.getById(loginId.toString());
 | 
			
		||||
        Set<String> rolePermission = sysPermissionService.getRolePermission(user);
 | 
			
		||||
        return new ArrayList<>(rolePermission);
 | 
			
		||||
        UserType userType = LoginUtils.getUserType(loginId);
 | 
			
		||||
        if (userType == UserType.SYS_USER) {
 | 
			
		||||
            Long userId = LoginUtils.getUserId();
 | 
			
		||||
            SysUser user = iSysUserService.getById(userId);
 | 
			
		||||
            Set<String> rolePermission = sysPermissionService.getRolePermission(user);
 | 
			
		||||
            return new ArrayList<>(rolePermission);
 | 
			
		||||
        } else if (userType == UserType.APP_USER) {
 | 
			
		||||
            // app端权限返回 自行根据业务编写
 | 
			
		||||
        }
 | 
			
		||||
        return new ArrayList<>();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user