[英]How to Inject ControllerContext in startup.cs in ASP.Net-Core 2.2
我有一个用例,其中每个登录用户都有一组URL,无论他/她的角色如何,他/她都可以访问。 我正在尝试在ASP.Net-core 2.2中实施一项策略以实现这一目标。 当用户注册时,用户可访问的每个URL都将被注册为声明,并且在经过身份验证的用户发出请求的同时,尝试将请求的URL /路径与为用户注册的URL声明进行比较。
由于我正在尝试使用授权策略来实现此目的,因此我创建了以下授权要求和处理程序
public class AccessPermissionRequirement : IAuthorizationRequirement
{
public ControllerContext controllerContext { get; }
public string routeArea = "";
public AccessPermissionRequirement(ControllerContext _controllerContext, string RouteArea ="")
{
controllerContext = _controllerContext;
routeArea = RouteArea;
}
}
public class AccessPermissionHandler : AuthorizationHandler<AccessPermissionRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, AccessPermissionRequirement requirement)
{
if (!context.User.Identity.IsAuthenticated)
{
return Task.CompletedTask;
}
var actionName = requirement.controllerContext.ActionDescriptor.ActionName;
var controllerName = requirement.controllerContext.ActionDescriptor.ControllerName;
var route = controllerName + "/" + actionName;
if (context.User.HasClaim("Routes", route))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
由于AccessPermissionRequirement类要求在构造函数中注入ControllerContext,以便我能够访问当前请求(在控制器外部),因此我发现很难在Startup.cs类的ConfigureServices方法中注册该策略。
下面是我所做的不起作用
services.AddAuthorization(options => {
options.AddPolicy("CheckAccess", policy => policy.Requirements.Add(new AccessPermissionRequirement(ControllerContext controllerContext)));
});
我收到以下错误
ControllerContext是在给定上下文中无效的类型
因此,我被困在这里,因为我不知道解决方法。
抱歉,这是我第一次尝试在ASP.Net-core中实施策略
我将感谢您解决此问题的指南。
谢谢
看来IAuthorizationFilter
非常适合您的情况。 关于此有一个很好的讨论:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.