2017-10-09 148 views
1

我正在学习如何使用角色和声明的教程。首先,它TEACHED使用角色的话,除其他事项外,我不得不把线下的ApplicationUserManager.cs代码:做了角色注释。但索赔注释是如何的?

public const string Administrator = "Admin"; 

由于该项目的想法是IMDB页面,只有管理员可以创建新的电影的流派,我不得不把注释

[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(); 
     } 
    } 

POST功能之前,对GenreController.cs如上图所示。一切正常。一切都很好。现在,本教程说在ApplicationUserManager.cs代码添加这两条线:

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

,所以我可以用索赔。

教程现在说“更新GenreController的创建行动,使用与指定要求创建的注释。

我知道那里的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 */ 
    } 
} 

回答

0

解决了! 我试图使用授权,就像角色不同的变化,但如果索赔建设是类有类似的构造:

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

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

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

即,使用授权,而不是授权