TeamMemberRoleHelper.cs
2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using SqlSugar;
using Volo.Abp.Users;
using Yi.Framework.Rbac.Domain.Entities;
namespace FoodLabeling.Application.Helpers;
/// <summary>
/// Team Member 角色识别(Company Admin / Partner Admin 等)。
/// </summary>
public static class TeamMemberRoleHelper
{
/// <summary>
/// UI 展示为 Company Admin,库内常见为 Partner Admin 或 RoleCode 含 partner。
/// </summary>
public static bool IsCompanyAdminRoleName(string? roleName)
{
if (string.IsNullOrWhiteSpace(roleName))
{
return false;
}
var name = roleName.Trim();
if (string.Equals(name, "Company Admin", StringComparison.OrdinalIgnoreCase))
{
return true;
}
if (string.Equals(name, "Partner Admin", StringComparison.OrdinalIgnoreCase))
{
return true;
}
return name.Contains("partner", StringComparison.OrdinalIgnoreCase) &&
name.Contains("admin", StringComparison.OrdinalIgnoreCase);
}
/// <summary>
/// 当前登录用户是否为 Company Admin 类角色。
/// </summary>
public static async Task<bool> IsCompanyAdminUserAsync(ISqlSugarClient db, ICurrentUser currentUser)
{
if (currentUser.Id is null)
{
return false;
}
var roleId = await db.Queryable<UserRoleEntity>()
.Where(ur => ur.UserId == currentUser.Id.Value)
.Select(ur => (Guid?)ur.RoleId)
.FirstAsync();
return await IsCompanyAdminRoleAsync(db, roleId);
}
/// <summary>
/// 是否 Company Admin 类角色(按 RoleId 查库)。
/// </summary>
public static async Task<bool> IsCompanyAdminRoleAsync(ISqlSugarClient db, Guid? roleId)
{
if (roleId is null)
{
return false;
}
var role = await db.Queryable<RoleAggregateRoot>()
.FirstAsync(x => !x.IsDeleted && x.Id == roleId.Value);
if (role is null)
{
return false;
}
if (IsCompanyAdminRoleName(role.RoleName))
{
return true;
}
var code = role.RoleCode?.Trim();
return !string.IsNullOrEmpty(code) &&
code.Contains("partner", StringComparison.OrdinalIgnoreCase);
}
/// <summary>
/// 列表/详情出参:Partner Admin → Company Admin(与 Web UI 一致)。
/// </summary>
public static string? FormatDisplayRoleName(string? roleName)
{
if (IsCompanyAdminRoleName(roleName) &&
!string.Equals(roleName?.Trim(), "Company Admin", StringComparison.OrdinalIgnoreCase))
{
return "Company Admin";
}
return roleName;
}
}