我正在尝试添加一些基于自定义角色的授权,但是我无法使启动配置调用我的AuthorizationHandler
。
我在GitHub上找到了一些相关的信息:这里。这是一个错误吗?
我正在使用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:在我的创业公司中,我获取网址/角色并将结果存储在全局变量中:
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
this.environment = env;
UrlRoles = GetRolesRoutes();
}
3: 我的配置是:注意传递的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: 我的Handler:没有被调用
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
时,我从未看到我的自定义需求作为一个需求出现,而我在启动中配置了该需求。我希望能够看到这个需求,并且如果存在这个需求,则我认为“回调”将会发生。但由于某种原因,我的配置未能添加该需求。
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);
}
}
}
IAuthorizationHandler
的依赖来注册您的PermissionHandler处理程序,而不是AuthorizationHandler<UrlRolesRequirement>
。尝试将其更改为services.AddSingleton<IAuthorizationHandler, PermissionHandler>();
。 - Dennis VW[Authorize("Roles")]
作为属性。 - Dennis VWPermissionHandler : IAuthorizationHandler
,但无法使用:PermissionHandler : AuthorizationHandler<UrlRolesRequirement>
。 - Wayne