我正在按照现在教我如何使用角色和声明的教程。首先,它教会使用角色,所以除其他外,我必须将下面的行放在 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 */
}
}
答案 0 :(得分:0)
解决了! 我正在使用Authorize作为角色尝试不同的变体,但是构建声明的类具有如下构造函数:
public AuthorizationAttribute(string claimType, object claimValue)
{
this.ClaimType = claimType;
this.ClaimValue = claimValue.ToString();
}
如问题所示,正确的注释是:
[Authorization(ApplicationUserManager.IsAdminClaim, ApplicationUserManager.IsAdminClaimValue)]
即使用授权,不授权。