如何在.Net Core中向角色声明添加自定义属性?

时间:2018-02-23 17:48:39

标签: c# asp.net-core

我使用Cookie身份验证而不是Identity Core。 我正在循环浏览用户应该从自定义表中拥有的角色并添加如下角色声明:

if (aartsUser != null)
{
    #region Create Claims
    // UserName claim and StaffId claim.  Will need StaffId to write to tables such as UploadStaffId for FacUpload.
    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.Name, loginModel.UserName),
        new Claim("StaffId", aartsUser.StaffID.ToString())
    };
    // Role Claims
    foreach(Position p in aartsUser.Positions)
    {
        claims.Add(new Claim(ClaimTypes.Role, p.Role.RoleCd));
    }
    #endregion

    var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
    await HttpContext.SignInAsync(new ClaimsPrincipal(claimsIdentity));

    return Redirect(loginModel?.ReturnUrl ?? "/");
}

此行中的RoleCd:

claims.Add(new Claim(ClaimTypes.Role, p.Role.RoleCd));

来自我拥有的角色实体:

[Table("role")]
public class Role
{
    [Key]
    [Column("role_id")]
    public short RoleID { get; set; }
    [Column("role_nm")]
    public string RoleName { get; set; }
    [Column("role_cd")]
    public string RoleCd { get; set; }
    [Column("role_group_nm")]
    public string RoleGroupName { get; set; }
    [Column("role_class_cd")]
    public string RoleClassCd { get; set; }

    public List<Position> Positions { get; set; }
}

我的问题是如何向角色声明添加自定义属性。 我有一个帐户信息页面,用户可以看到他们的角色。 但是我从自定义表中显示了RoleCd。 我仍然希望将此代码用作角色,但我还被要求显示RoleNm,就像文本描述一样。

如何在此行中添加描述等自定义属性?

claims.Add(new Claim(ClaimTypes.Role, p.Role.RoleCd));

类似的东西:

claims.Add(new Claim(ClaimTypes.Role, p.Role.RoleCd).Properties.Add("Description", p.Role.RoleName));

但它说不能从void转换为System.Security.Claims.Claim。

2 个答案:

答案 0 :(得分:0)

根据您自己的回答,我有更好的解决方案。因此您无需再次查询声明。

       foreach(Position p in aartsUser.Positions)
        {
            Claim newClaim = new Claim(ClaimTypes.Role, p.Role.RoleCd));
            newClaim.Properties.Add("Description", p.Role.RoleName);
            claims.Add(newClaim);
        }

答案 1 :(得分:-1)

我明白了。

这是我做的:

build.gradle