要声明的 ASP.NET Core 用户角色枚举值

时间:2021-08-01 15:27:32

标签: c# enums asp.net-core-5.0

我有 angular 12 前端和 ASP.NET Core 5 后端。我正在通过 JWT 令牌转移角色。我希望将角色作为整数传递,因此我不会硬核角色名称。前端本身将有一个枚举,当有像这些水平菜单设置仅对管理员可用的检查时,这将使我更容易if (user.role === Role.Administrator) 等。

问题是没有new("role", user.Role)这样的重载。如果我执行 user.Role.ToString(),它会发送 Administrator,这是键而不是值 1

public class User
{
    public string Id { get; set; }
    public string Email { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public Role Role { get; set; }
}

public enum Role
{
    Administrator = 1,
    DepartmentAdministrator = 2,
    User = 3
}

public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
    var sub = context.Subject.GetSubjectId();
    var user = _userRepository.FindById(sub);

    var claims = new List<Claim>
    {
        new("username", user.Username),
        new("email", user.Email),
        new("role", user.Role) // cannot be int
    };

    context.IssuedClaims = claims;

    return Task.CompletedTask;
}

1 个答案:

答案 0 :(得分:1)

您可以投射枚举:

int role = (int) user.Role;

var claims = new List<Claim>
    {
        new("username", user.Username),
        new("email", user.Email),
        new("role", role.ToString())
    };