| | |
| | | |
| | | @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 |
| | |
| | | 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; |
| | | } |