gpt4 book ai didi

asp.net - 如何创建自定义授权属性以检查 Asp.Net Core 中的角色和 url 路径?

转载 作者:行者123 更新时间:2023-12-04 17:44:17 25 4
gpt4 key购买 nike

我想创建一个自定义授权属性来检查角色和 url 路径。

我已经找到了使用基于策略的授权在 Asp.Net Core 中执行此操作的方法,但我尝试实现它,但我无法使用传入 url 获取 HttpContext。
AuthorizationHandlerContext可能无法访问 HttpContext。

如何使用 url 路径获取当前的 HttpContext?是否可以这样做或以其他方式?

我已尝试使用此代码创建自定义策略:

public class RoleUrlValidationHandler : AuthorizationHandler<RoleUrlValidationRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RoleUrlValidationRequirement requirement)
{
var path = //Here I need get current url path for example - /api/posts/4545411
var pathPart = path.Split('/');
var clientId = pathPart[3];

if (context.User.IsInRole(clientId))
{
context.Succeed(requirement);
}

return Task.CompletedTask;
}
}

我想创建以下内容:
[Authorize(Policy="RoleUrlValidation")] //Get ClientId from Url and check User's roles
public class PostsController : Controller
{
public ActionResult Get()
{
}
}

最佳答案

政策方法是正确的。您唯一错过的是,您可以在处理程序中使用依赖注入(inject)。

public class RoleUrlValidationHandler : AuthorizationHandler<RoleUrlValidationRequirement>
{
private readonly IHttpContextAccessor contextAccessor;
public class RoleUrlValidationHandler(IHttpContextAccessor contextAccessor)
{
this.contextAccessor = contextAccessor;
}

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RoleUrlValidationRequirement requirement)
{
var httpContext = contextAccessor.HttpContext;
var path = httpContext.Request.Path;
var pathPart = path.Split('/');
var clientId = pathPart[3];

if (context.User.IsInRole(clientId))
{
context.Succeed(requirement);
}

return Task.CompletedTask;
}
}

您可能还需要注册 IHttpContextAccessor因为它默认没有注册。
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

额外位:

考虑使用 var routeData = httpContext.GetRouteData()而不是使用 path.Split('/')从中读取值,以便您可以轻松地从路由中读取参数值。

关于asp.net - 如何创建自定义授权属性以检查 Asp.Net Core 中的角色和 url 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41533910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com