我正在尋找一種「簡單」的方式向本地用戶自動添加角色聲明以測試我的授權邏輯;也就是說,希望在我的控制器授權之前向本地用戶添加一些特定的聲明。.NET核心MVC在開發授權前向本地用戶添加角色聲明
我瞭解到,在過去的一些類似於這樣可以爲控制器來完成:
#if DEBUG
protected override void OnAuthorization(AuthorizationContext filterContext)
{
var roles = new[] { "role-under-test"};
HttpContext.User = new GenericPrincipal(new GenericIdentity("DebugUser"), roles);
base.OnAuthorization(filterContext);
}
#endif
然而,在此之前.NET的核心是這是我在我現在的工作。慢慢地,我已經按照下面提供的代碼工作,這似乎有效,但顯然比上面的例子更麻煩。所以我的問題是,是否有人知道更好 - 更簡單的方法來實現這一目標?
定製的授權屬性:
public class CustomAuthAttribute : RolesAuthorizationRequirement {
public CustomAuthAttribute(IEnumerable<string> allowedRoles) : base(allowedRoles) { }
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RolesAuthorizationRequirement requirement) {
#if DEBUG
context.User.AddIdentity(new ClaimsIdentity(new GenericIdentity("DebugUser"), new[] {
new Claim(ClaimsIdentity.DefaultRoleClaimType, "users"),
new Claim(ClaimsIdentity.DefaultRoleClaimType, "admins")
}));
#endif
return base.HandleRequirementAsync(context, requirement);
}
}
在Startup.cs
public void ConfigureServices(IServiceCollection services) {
// ...
services.AddAuthorization(options =>
options.AddPolicy("UsersAndAdmins",
policy => policy.AddRequirements(new CustomAuthAttribute(new []{"users", "admins"}))));
}
,然後用它的控制器:
[Authorize(Policy = "UsersAndAdmins")]
public class HomeController : Controller {
// ...
你檢出https:// channel9.msdn.com/博客/ Seth-Juarez /高級 - aspnet-core-Authorization-with-B arry-Dorrans在頻道9上。看起來他們會幫助你很多。這是一個2視頻系列,但有很多偉大的信息在那裏。這實際上是兩個中的第二個 –