📝 认证审核注释改为事实描述并统一引用菜单码常量
This commit is contained in:
+2
-2
@@ -34,8 +34,8 @@ import java.io.Serializable;
|
||||
/**
|
||||
* 认证审核能力
|
||||
* <p>
|
||||
* 小程序端进入审核页前先取它决定空态与按钮禁用。没有权限时两个字段为 false,
|
||||
* 而不是让接口返回 403——列表与详情各自仍挂权限表达式,这里只回答「能不能」。
|
||||
* 无权限时两个字段为 false;本接口不挂权限表达式。
|
||||
* 列表与详情各自的权限表达式不变。
|
||||
*
|
||||
* @author Chill
|
||||
*/
|
||||
|
||||
+1
-1
@@ -101,7 +101,7 @@ public class CertificationAuditController extends BladeController {
|
||||
return R.status(certAuditService.audit(id, Boolean.TRUE.equals(pass), rejectReason));
|
||||
}
|
||||
|
||||
// 不挂 @PreAuth:没有审核权限时也要能拿到 false,而不是被拦成 403
|
||||
// 本接口不挂 @PreAuth;无权限时返回 false。
|
||||
@GetMapping("/capability")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@Operation(summary = "审核能力判定", description = "无权限返回 false,不抛 403,供小程序决定空态与按钮禁用")
|
||||
|
||||
+1
-1
@@ -185,7 +185,7 @@ public class CertAuditServiceImpl implements ICertAuditService {
|
||||
|
||||
@Override
|
||||
public CertAuditCapabilityVO capability() {
|
||||
// 菜单码与三个审核接口的 @PreAuth 表达式同源,不另写字面量,也不在这里求值表达式
|
||||
// 使用与三个审核接口 @PreAuth 相同的菜单码常量;表达式由框架求值,此处直接查菜单。
|
||||
CertAuditCapabilityVO capability = new CertAuditCapabilityVO();
|
||||
capability.setCanView(permissionHandler.hasMenu(CertAuditPermissions.DRIVER_VIEW_MENU)
|
||||
|| permissionHandler.hasMenu(CertAuditPermissions.VEHICLE_VIEW_MENU));
|
||||
|
||||
+8
-14
@@ -28,20 +28,14 @@ package org.springblade.transport.support;
|
||||
/**
|
||||
* 认证审核的权限表达式
|
||||
* <p>
|
||||
* 用菜单码而不是角色名。本项目的权限走「角色-菜单」授权,写死角色名有两个坑:
|
||||
* 角色别名可能对不上(曾写成 {@code admin},而库里只有 {@code administrator}),
|
||||
* 以及会漏掉实际承担审核的岗位(例如「运管」)。
|
||||
* 四个菜单码:司机查看 {@code cert_certification_audit_driver}、车辆查看 {@code cert_certification_audit_vehicle}、
|
||||
* 司机审核 {@code cert_certification_audit_driver_audit}、车辆审核 {@code cert_certification_audit_vehicle_audit}。
|
||||
* <p>
|
||||
* 用表达式而不是 {@code @PreAuth(menu = "...")} 的单值形式,是因为同一组接口
|
||||
* 由 {@code bizType} 参数区分、同时服务司机与车辆两侧,单值 menu 表达不了「二者之一」。
|
||||
* {@code AUDIT_VIEW} 与 {@code AUDIT_ACTION} 由上述常量拼接,结果仍是编译期常量。
|
||||
* 三个审核接口的 {@code @PreAuth} 与 {@code CertAuditServiceImpl#capability()} 使用同一组菜单码常量。
|
||||
* <p>
|
||||
* 四个菜单码在本类集中定义,权限表达式与能力判定接口都只引用这些常量,
|
||||
* 避免同一串菜单码在多处各写一遍、改了一处漏掉另一处。
|
||||
* <p>
|
||||
* 表达式最终由框架交给 SpEL 求值,root object 是 {@code AuthFun},
|
||||
* 故这里用的函数名必须与它的公开方法一致({@code hasMenu})。
|
||||
* {@code CertAuditPermissionsTest} 会实际解析并求值这两个表达式,
|
||||
* 一旦写错函数名或括号,测试即失败——而不是等到线上请求时抛 500。
|
||||
* 表达式由框架交给 SpEL 求值,root object 是 {@code AuthFun},函数名须与它的公开方法一致({@code hasMenu})。
|
||||
* {@code CertAuditPermissionsTest} 会解析并求值这两个表达式。
|
||||
*
|
||||
* @author Chill
|
||||
*/
|
||||
@@ -68,9 +62,9 @@ public final class CertAuditPermissions {
|
||||
public static final String VEHICLE_AUDIT_MENU = "cert_certification_audit_vehicle_audit";
|
||||
|
||||
/**
|
||||
* 待审列表与审核详情:司机或车辆任一审核菜单即可
|
||||
* 待审列表与审核详情:司机或车辆任一查看菜单即可
|
||||
* <p>
|
||||
* 由上面两个查看菜单码拼成,结果仍是编译期常量,故 {@code @PreAuth} 可以直接引用。
|
||||
* 由上面两个查看菜单码拼成,结果仍是编译期常量,{@code @PreAuth} 可以直接引用。
|
||||
*/
|
||||
public static final String AUDIT_VIEW =
|
||||
"hasMenu('" + DRIVER_VIEW_MENU + "') or hasMenu('" + VEHICLE_VIEW_MENU + "')";
|
||||
|
||||
+6
-3
@@ -35,6 +35,9 @@ import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.springblade.transport.support.CertAuditPermissions.DRIVER_AUDIT_MENU;
|
||||
import static org.springblade.transport.support.CertAuditPermissions.DRIVER_VIEW_MENU;
|
||||
import static org.springblade.transport.support.CertAuditPermissions.VEHICLE_AUDIT_MENU;
|
||||
|
||||
/**
|
||||
* 管理端认证审核测试。
|
||||
@@ -359,7 +362,7 @@ class CertAuditServiceImplTest {
|
||||
@Test
|
||||
@DisplayName("能力判定:只有司机查看菜单时能进审核页,但审核按钮必须禁用")
|
||||
void capabilityViewWithoutAudit() {
|
||||
when(permissionHandler.hasMenu("cert_certification_audit_driver")).thenReturn(true);
|
||||
when(permissionHandler.hasMenu(DRIVER_VIEW_MENU)).thenReturn(true);
|
||||
|
||||
CertAuditCapabilityVO capability = service.capability();
|
||||
|
||||
@@ -370,7 +373,7 @@ class CertAuditServiceImplTest {
|
||||
@Test
|
||||
@DisplayName("能力判定:司机审核按钮菜单即可审核")
|
||||
void capabilityAuditWithDriverMenu() {
|
||||
when(permissionHandler.hasMenu("cert_certification_audit_driver_audit")).thenReturn(true);
|
||||
when(permissionHandler.hasMenu(DRIVER_AUDIT_MENU)).thenReturn(true);
|
||||
|
||||
assertTrue(service.capability().getCanAudit(), "司机审核菜单应放行审核动作");
|
||||
}
|
||||
@@ -378,7 +381,7 @@ class CertAuditServiceImplTest {
|
||||
@Test
|
||||
@DisplayName("能力判定:车辆审核按钮菜单即可审核")
|
||||
void capabilityAuditWithVehicleMenu() {
|
||||
when(permissionHandler.hasMenu("cert_certification_audit_vehicle_audit")).thenReturn(true);
|
||||
when(permissionHandler.hasMenu(VEHICLE_AUDIT_MENU)).thenReturn(true);
|
||||
|
||||
assertTrue(service.capability().getCanAudit(), "车辆审核菜单应放行审核动作");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user