🐛 认证审核放行小程序调度端管理身份

This commit is contained in:
2026-10-26 11:38:50 +08:00
parent 0ebba9d6b7
commit b7d922077d
5 changed files with 96 additions and 8 deletions
@@ -50,6 +50,7 @@ import org.springblade.transport.service.ITransportCertRecordService;
import org.springblade.transport.service.ITransportVehicleService;
import org.springblade.transport.support.CertAuditPermissions;
import org.springblade.transport.support.CertificationRuleSupport;
import org.springblade.transport.support.MpUserDataScopeSupport;
import org.springblade.transport.wrapper.TransportCertRecordWrapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -79,6 +80,7 @@ public class CertAuditServiceImpl implements ICertAuditService {
private final ITransportVehicleService transportVehicleService;
private final IDriverService driverService;
private final IPermissionHandler permissionHandler;
private final MpUserDataScopeSupport mpUserDataScopeSupport;
@Override
public IPage<TransportCertRecordVO> pendingPage(String bizType, String bizKey, String driverName, String driverMobile,
@@ -185,8 +187,14 @@ public class CertAuditServiceImpl implements ICertAuditService {
@Override
public CertAuditCapabilityVO capability() {
// 使用与三个审核接口 @PreAuth 相同的菜单码常量;表达式由框架求值,此处直接查菜单。
// 与三个审核接口 @PreAuth 同一口径:小程序调度端管理身份(token roleName=admin)查不到菜单码,直接放行;
// 其余账号查菜单。
CertAuditCapabilityVO capability = new CertAuditCapabilityVO();
if (mpUserDataScopeSupport.isMpDispatcher()) {
capability.setCanView(true);
capability.setCanAudit(true);
return capability;
}
capability.setCanView(permissionHandler.hasMenu(CertAuditPermissions.DRIVER_VIEW_MENU)
|| permissionHandler.hasMenu(CertAuditPermissions.VEHICLE_VIEW_MENU));
capability.setCanAudit(permissionHandler.hasMenu(CertAuditPermissions.DRIVER_AUDIT_MENU)
@@ -34,6 +34,10 @@ package org.springblade.transport.support;
* {@code AUDIT_VIEW} 与 {@code AUDIT_ACTION} 由上述常量拼接,结果仍是编译期常量。
* 三个审核接口的 {@code @PreAuth} 与 {@code CertAuditServiceImpl#capability()} 使用同一组菜单码常量。
* <p>
* 小程序调度端管理身份不走菜单码:小程序登录不经过 {@code blade_user},token 的 {@code roleId}
* 是占位值 {@code "0"}、{@code roleName} 取 {@code blade_mp_user.identities}(调度端管理员为 {@code admin}),
* 查不到 {@code blade_role_menu},因此两个表达式末尾各放行一个角色名 {@code admin}。
* <p>
* 表达式由框架交给 SpEL 求值,root object 是 {@code AuthFun},函数名须与它的公开方法一致({@code hasMenu})。
* {@code CertAuditPermissionsTest} 会解析并求值这两个表达式。
*
@@ -62,18 +66,28 @@ public final class CertAuditPermissions {
public static final String VEHICLE_AUDIT_MENU = "cert_certification_audit_vehicle_audit";
/**
* 待审列表与审核详情:司机或车辆任一查看菜单即可
* 小程序调度端管理身份的角色名
* <p>
* 取值来自 {@code blade_mp_user.identities},由登录时拼进 token 的 {@code roleName};
* 不是 {@code blade_role} 里的角色别名。
*/
public static final String MP_DISPATCHER_ROLE = "admin";
/**
* 待审列表与审核详情:司机或车辆任一查看菜单,或小程序调度端管理身份
* <p>
* 由上面两个查看菜单码拼成,结果仍是编译期常量,{@code @PreAuth} 可以直接引用。
*/
public static final String AUDIT_VIEW =
"hasMenu('" + DRIVER_VIEW_MENU + "') or hasMenu('" + VEHICLE_VIEW_MENU + "')";
"hasMenu('" + DRIVER_VIEW_MENU + "') or hasMenu('" + VEHICLE_VIEW_MENU + "')"
+ " or hasRole('" + MP_DISPATCHER_ROLE + "')";
/**
* 审核动作:司机或车辆任一「审核」按钮权限即可
* 审核动作:司机或车辆任一「审核」按钮权限,或小程序调度端管理身份
*/
public static final String AUDIT_ACTION =
"hasMenu('" + DRIVER_AUDIT_MENU + "') or hasMenu('" + VEHICLE_AUDIT_MENU + "')";
"hasMenu('" + DRIVER_AUDIT_MENU + "') or hasMenu('" + VEHICLE_AUDIT_MENU + "')"
+ " or hasRole('" + MP_DISPATCHER_ROLE + "')";
private CertAuditPermissions() {
}