角色注释了吗?但索赔注释怎么样?

时间:2017-10-09 10:35:50

标签: c# roles claims-based-identity

我正在按照现在教我如何使用角色和声明的教程。首先,它教会使用角色,所以除其他外,我必须将下面的行放在 ApplicationUserManager.cs 代码中:

    public const string Administrator = "Admin";

由于项目的想法是一个IMDB页面,只有管理员可以创建新的Movie的类型,我不得不把注释

    [Authorize(Roles = ApplicationUserManager.Administrator)] /* role annotation */
    [HttpPost]
    [Route("Api/Genres")]
    public async Task<IHttpActionResult> PostAsync(GenrePostRequest request)
    {
        using (var db = new ApplicationDbContext())
        {
            await Genre.CreateAsync(request.Name, GetUserId(), db, Request.GetOwinContext().GetUserManager<ApplicationUserManager>());
            return Ok();
        }
    }

GenreController.cs 上的Post函数之前,如上图所示。一切都很好。一切都是好的。现在,教程说要在 ApplicationUserManager.cs 代码中添加这两行代码:

    public const string IsAdminClaim = "IsAdmin";
    public const string IsAdminClaimValue = "True";

所以我可以使用索赔。

教程现在说&#34; 更新GenreController的创建操作以使用使用指定声明创建的注释。&#34;

我知道GenreController的创建动作在哪里但是,声明的注释应该是什么样的?

我知道我有一个名为 AuthorizationAttribute.cs 的类看起来像这样:

public class AuthorizationAttribute : AuthorizationFilterAttribute
{
    public string ClaimType { get; set; }
    public string ClaimValue { get; set; }

    public AuthorizationAttribute(string claimType, object claimValue)
    {
        this.ClaimType = claimType;
        this.ClaimValue = claimValue.ToString();
    }
    public override Task OnAuthorizationAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
    {
        /* some codes */
    }
}

1 个答案:

答案 0 :(得分:0)

解决了! 我正在使用Authorize作为角色尝试不同的变体,但是构建声明的类具有如下构造函数:

public AuthorizationAttribute(string claimType, object claimValue)
{
    this.ClaimType = claimType;
    this.ClaimValue = claimValue.ToString();
}

如问题所示,正确的注释是:

[Authorization(ApplicationUserManager.IsAdminClaim, ApplicationUserManager.IsAdminClaimValue)]

即使用授权,不授权