shinnosuke
2026-09-27 35c0810b268661c79f776fe922f7e3834cba4186
talent-card-server/src/main/java/com/talentcard/server/business/admin/auth/AdminAuthService.java
@@ -111,6 +111,16 @@
    @Transactional(readOnly = true)
    public boolean hasPermission(Long operatorId, String permission) {
        return hasAnyPermission(operatorId, List.of(permission));
    }
    /**
     * 一个接口可能同时服务多个页面(例如家属卡接口既挂在「家属卡申请」也挂在「家属卡管理」下),
     * 这时只要命中其中任意一个页面权限就放行。
     */
    @Transactional(readOnly = true)
    public boolean hasAnyPermission(Long operatorId, List<String> permissions) {
        if (permissions.isEmpty()) return true;
        List<Map<String, Object>> result = rows("""
                select o.role_code, r.permission_codes
                from admin_operator o left join admin_role r on r.role_code = o.role_code
@@ -122,7 +132,8 @@
        if ("platform_admin".equals(String.valueOf(operator.get("roleCode")))) return true;
        String raw = String.valueOf(operator.getOrDefault("permissionCodes", ""));
        try {
            return JSON.parseArray(raw, String.class).contains(permission);
            List<String> granted = JSON.parseArray(raw, String.class);
            return permissions.stream().anyMatch(granted::contains);
        } catch (Exception ignored) {
            return false;
        }