用户模块:用户权限控制
This commit is contained in:
parent
43bcec3cc0
commit
b11350f61b
@ -0,0 +1,23 @@
|
||||
package com.huangge1199.picture.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* annotation
|
||||
*
|
||||
* @author huangge1199
|
||||
* @since 2025/6/30 15:58:45
|
||||
*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface AuthCheck {
|
||||
|
||||
/**
|
||||
* 必须有某个角色
|
||||
*/
|
||||
String mustRole() default "";
|
||||
}
|
||||
|
@ -0,0 +1,66 @@
|
||||
package com.huangge1199.picture.aop;
|
||||
|
||||
import com.huangge1199.picture.annotation.AuthCheck;
|
||||
import com.huangge1199.picture.exception.ErrorCode;
|
||||
import com.huangge1199.picture.exception.MyException;
|
||||
import com.huangge1199.picture.model.entity.User;
|
||||
import com.huangge1199.picture.model.enums.UserRoleEnum;
|
||||
import com.huangge1199.picture.service.UserService;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestAttributes;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* AuthInterceptor
|
||||
*
|
||||
* @author huangge1199
|
||||
* @since 2025/6/30 15:59:56
|
||||
*/
|
||||
@Aspect
|
||||
@Component
|
||||
public class AuthInterceptor {
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
/**
|
||||
* 执行拦截
|
||||
*
|
||||
* @param joinPoint 切入点
|
||||
* @param authCheck 权限校验注解
|
||||
*/
|
||||
@Around("@annotation(authCheck)")
|
||||
public Object doInterceptor(ProceedingJoinPoint joinPoint, AuthCheck authCheck) throws Throwable {
|
||||
String mustRole = authCheck.mustRole();
|
||||
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
|
||||
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
|
||||
// 当前登录用户
|
||||
User loginUser = userService.getLoginUser(request);
|
||||
UserRoleEnum mustRoleEnum = UserRoleEnum.getEnumByValue(mustRole);
|
||||
// 不需要权限,放行
|
||||
if (mustRoleEnum == null) {
|
||||
return joinPoint.proceed();
|
||||
}
|
||||
// 以下为:必须有该权限才通过
|
||||
// 获取当前用户具有的权限
|
||||
UserRoleEnum userRoleEnum = UserRoleEnum.getEnumByValue(loginUser.getUserRole());
|
||||
// 没有权限,拒绝
|
||||
if (userRoleEnum == null) {
|
||||
throw new MyException(ErrorCode.NO_AUTH_ERROR);
|
||||
}
|
||||
// 要求必须有管理员权限,但用户没有管理员权限,拒绝
|
||||
if (UserRoleEnum.ADMIN.equals(mustRoleEnum) && !UserRoleEnum.ADMIN.equals(userRoleEnum)) {
|
||||
throw new MyException(ErrorCode.NO_AUTH_ERROR);
|
||||
}
|
||||
// 通过权限校验,放行
|
||||
return joinPoint.proceed();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user