From 4087751fccc12d24f3884cc0b38c0cdcdf260cdf Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Tue, 23 May 2023 05:18:39 +0800 Subject: [PATCH] =?UTF-8?q?SaCheckOr=20=E6=B3=A8=E8=A7=A3=E9=89=B4?= =?UTF-8?q?=E6=9D=83=E7=9A=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sa-token-doc/use/at-check.md | 56 +++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/sa-token-doc/use/at-check.md b/sa-token-doc/use/at-check.md index a4ff0a54..42f432c7 100644 --- a/sa-token-doc/use/at-check.md +++ b/sa-token-doc/use/at-check.md @@ -151,7 +151,61 @@ public class TestController { -### 6、在业务逻辑层使用注解鉴权 +### 6、批量注解鉴权 + +使用 `@SaCheckOr` 表示批量注解鉴权: + +``` java +// 在 `@SaCheckOr` 中可以指定多个注解,只要当前会话满足其中一个注解即可通过验证,进入方法。 +@SaCheckOr( + login = @SaCheckLogin, + role = @SaCheckRole("admin"), + permission = @SaCheckPermission("user.add"), + safe = @SaCheckSafe("update-password"), + basic = @SaCheckBasic(account = "sa:123456"), + disable = @SaCheckDisable("submit-orders") +) +@RequestMapping("test") +public SaResult test() { + // ... + return SaResult.ok(); +} +``` + +每一项属性都可以写成数组形式,例如: + +``` java +// 当前客户端只要有 [ login 账号登录] 或者 [user 账号登录] 其一,就可以通过验证进入方法。 +// 注意:`type = "login"` 和 `type = "user"` 是多账号模式章节的扩展属性,此处你可以先略过这个知识点。 +@SaCheckOr( + login = { @SaCheckLogin(type = "login"), @SaCheckLogin(type = "user") } +) +@RequestMapping("test") +public SaResult test() { + // ... + return SaResult.ok(); +} +``` + +疑问:既然有了 `@SaCheckOr`,为什么没有与之对应的 `@SaCheckAnd` 呢? + +因为当你写多个注解时,其天然就是 `and` 校验关系,例如: + +``` java +// 当你在一个方法上写多个注解鉴权时,其默认就是要满足所有注解规则后,才可以进入方法,只要有一个不满足,就会抛出异常 +@SaCheckLogin +@SaCheckRole("admin") +@SaCheckPermission("user.add") +@RequestMapping("test") +public SaResult test() { + // ... + return SaResult.ok(); +} +``` + + + +### 7、在业务逻辑层使用注解鉴权 疑问:我能否将注解写在其它架构层呢,比如业务逻辑层? 使用拦截器模式,只能在`Controller层`进行注解鉴权,如需在任意层级使用注解鉴权,请参考:[AOP注解鉴权](/plugin/aop-at)