feat: 重构 CRUD API 权限控制,新增 CrudApiPermissionPrefixCache 缓存权限前缀

- 新增 CrudApiPermissionPrefixCache 类用于缓存 CRUD API权限前缀
- 修改 SaTokenConfiguration,为使用 @CrudRequestMapping 注解的 Controller缓存权限前缀
- 重构 BaseController 中的权限校验逻辑,使用缓存的权限前缀
- 更新 SmsConfigController 和 SmsLogController 中的 @CrudRequestMapping 注解路径
This commit is contained in:
2025-07-24 22:34:34 +08:00
parent 5fded43b7a
commit 83514b9251
5 changed files with 98 additions and 12 deletions

View File

@@ -35,6 +35,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.AnnotationUtils;
import top.continew.admin.common.config.crud.CrudApiPermissionPrefixCache;
import top.continew.admin.common.context.UserContext;
import top.continew.admin.common.context.UserContextHolder;
import top.continew.admin.open.sign.OpenApiSignTemplate;
@@ -113,11 +114,15 @@ public class SaTokenConfiguration {
if (AopUtils.isAopProxy(bean)) {
clazz = AopProxyUtils.ultimateTargetClass(bean);
}
// 使用 @CrudRequestMapping 的 Controller如果使用了 @SaIgnore 注解,则表示忽略校验
// 使用 @CrudRequestMapping 的 Controller如果使用了 @SaIgnore 注解,则表示忽略认证和权限校验
CrudRequestMapping crudRequestMapping = AnnotationUtils.findAnnotation(clazz, CrudRequestMapping.class);
SaIgnore saIgnore = AnnotationUtils.findAnnotation(clazz, SaIgnore.class);
if (crudRequestMapping != null && saIgnore != null) {
return crudRequestMapping.value() + StringConstants.PATH_PATTERN;
if (crudRequestMapping != null) {
if (saIgnore != null) {
return crudRequestMapping.value() + StringConstants.PATH_PATTERN;
}
// 缓存权限前缀
CrudApiPermissionPrefixCache.put(clazz, crudRequestMapping.value());
}
return null;
}).filter(Objects::nonNull).toList();