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