gpt4 book ai didi

asp.net-mvc - 在自定义 Controller 工厂中进行通用授权的良好做法?

转载 作者:行者123 更新时间:2023-12-01 01:30:05 25 4
gpt4 key购买 nike

我的 Controller 共享一个客户端 ID。路线:

clients/{clientId}/{controller}/{action}/{id}

示例网址:
clients/1/orders/details/1
clients/2/children/index
clients/2/cars/create

您需要为客户提供适当的授权。我不想在每个 Controller 中进行相同的客户端授权。我想出了在自定义 Controller 工厂中进行自动化的想法,如下所示:
public class CustomControllerFactory : DefaultControllerFactory
{
private readonly IAuthService _authService;

public CustomControllerFactory(IAuthService authService)
{
_authService = authService;
}

protected override IController GetControllerInstance(
RequestContext requestContext, Type controllerType)
{
var doAuth = requestContext.RouteData.Values.ContainsKey("clientId");
if (doAuth)
{
var principal = requestContext.HttpContext.User;
var clientId = long.Parse(
requestContext.RouteData.Values["clientId"].ToString());
var authorized = _authService.Client(principal, clientId);
if (!authorized)
{
return new AuthController();
}
}
return base.GetControllerInstance(requestContext, controllerType);
}
}

您认为这是一个好习惯吗?为什么?

最佳答案

不,我不认为这是一个好的做法。定制AuthorizeAttribute似乎更适合处理授权而不是 Controller 工厂。

关于asp.net-mvc - 在自定义 Controller 工厂中进行通用授权的良好做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358593/

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