我正在尝试添加一些基于自定义角色的authorisation
,但我无法
将启动配置为调用我的AuthorizationHandler
.
我在GitHub上找到了一些相关信息:here https://github.com/dotnet/aspnetcore/issues/4656。
这是一个错误吗?
我在用ASP.NET Core 3.1
我的初始化如下:
1:这使用 Dapper ORM 从数据库检索 url/角色:
private List<UrlRole> GetRolesRoutes()
{
var urlRole = DapperORM.ReturnList<UrlRole>("user_url_role_all");
return urlRole.Result.ToList();
}
2:在我的 Startup 中,我获取 url/roles 并将结果存储在全局变量中:
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
this.environment = env;
UrlRoles = GetRolesRoutes();
}
3:我的配置是:Note the UrlRoles
被传递的
public void ConfigureServices(IServiceCollection services)
{
// .. snip
services.AddAuthorization(o =>
o.AddPolicy(_RequireAuthenticatedUserPolicy,
builder => builder.RequireAuthenticatedUser()));
services.AddAuthorization(options =>
{
options.AddPolicy("Roles", policy =>
policy.Requirements.Add(new UrlRolesRequirement(UrlRoles)));
});
services.AddSingleton<AuthorizationHandler<UrlRolesRequirement>, PermissionHandler>();
}
5:我的处理程序:没有被调用
public class PermissionHandler : AuthorizationHandler<UrlRolesRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, UrlRolesRequirement urlRolesRequirement)
{
var pendingRequirements = context.PendingRequirements.ToList();
foreach (var requirement in pendingRequirements)
{
}
return Task.CompletedTask;
}
}
6:我的要求课程:
public class UrlRolesRequirement : IAuthorizationRequirement
{
private List<UrlRole> UrlRoles { get; }
public UrlRolesRequirement(List<UrlRole> urlRoles)
{
UrlRoles = urlRoles;
}
}
当我调试时ASP.NET Core
AuthorizationHandler
,我从来没有看到我的自定义需求是我在 Startup.xml 中配置的需求。我期望看到该要求,如果存在该要求,那么我认为“回调”将会发生。但由于某种原因,我的配置无法添加要求。
public virtual async Task HandleAsync(AuthorizationHandlerContext context)
{
if (context.Resource is TResource)
{
foreach (var req in context.Requirements.OfType<TRequirement>())
{
await HandleRequirementAsync(context, req, (TResource)context.Resource);
}
}
}