using Volo.Abp.Users; using Yi.Framework.Rbac.Domain.Shared.Consts; namespace FoodLabeling.Application.Helpers; /// /// Reports 模块角色判断(与 JWT 中角色声明一致) /// public static class ReportsRoleHelper { /// /// 是否为「可查看全部用户打印数据」的管理员: /// /// 标准 中含角色码 admin(普通账号绑定 RoleCode=admin 时走此路径); /// 内置超管:用户名 admin 时 JWT 使用自定义 claim Roles,不写多条 role,需单独识别; /// 超管权限 claim Permission*:*:* 时视为管理员。 /// /// public static bool IsAdminRole(ICurrentUser currentUser) { if (currentUser.Id is null) { return false; } var userName = currentUser.UserName?.Trim(); if (!string.IsNullOrWhiteSpace(userName) && string.Equals(userName, UserConst.Admin, StringComparison.OrdinalIgnoreCase)) { return true; } foreach (var c in currentUser.FindClaims(TokenTypeConst.Permission)) { if (!string.IsNullOrWhiteSpace(c.Value) && string.Equals(c.Value.Trim(), UserConst.AdminPermissionCode, StringComparison.Ordinal)) { return true; } } var rolesClaim = currentUser.FindClaims(TokenTypeConst.Roles).Select(x => x.Value).FirstOrDefault(); if (!string.IsNullOrWhiteSpace(rolesClaim)) { foreach (var part in rolesClaim.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)) { if (string.Equals(part, UserConst.AdminRolesCode, StringComparison.OrdinalIgnoreCase)) { return true; } } } if (currentUser.Roles is not null) { foreach (var r in currentUser.Roles) { if (!string.IsNullOrWhiteSpace(r) && string.Equals(r.Trim(), UserConst.AdminRolesCode, StringComparison.OrdinalIgnoreCase)) { return true; } } } return false; } }