gpt4 book ai didi

asp.net-mvc - 仅针对一项操作覆盖 Controller AuthorizeAttribute

转载 作者:行者123 更新时间:2023-12-03 05:40:13 28 4
gpt4 key购买 nike

我有一个用 AuthorizeAttribute 装饰的 Controller 。该 Controller 包含多个操作,除了一个需要 CustomAuthorizeAttribute 提供的自定义身份验证的操作之外,所有操作都需要身份验证。

我的问题是,一旦我在 Controller 级别添加了 [Authorize],我可以仅在一个操作中使用 [CustomAuthorize] 覆盖它(或删除它)吗?或者我是否必须从 Controller 级别删除[授权]并将其单独添加到每个其他操作中?

我纯粹是为了方便,因为我很懒,不想用 AuthorizeAttribute 来装饰每个操作。

[Authorize]
public class MyController : Controller {

//requires authentication
public ViewResult Admin() {
return View();
}

//... a lot more actions requiring authentication

//requires custom authentication
[CustomAuthorize] //never invoked as already failed at controller level
public ViewResult Home() {
return View();
}

}

最佳答案

在 MVC 5 中,您可以使用新属性 OverrideAuthorization 覆盖任何操作的授权。基本上,您将其添加到具有与 Controller 中定义的授权配置不同的授权配置的操作中。

你这样做:

[OverrideAuthorization]
[Authorize(Roles = "Employee")]
public ActionResult List() { ... }

更多信息请访问 http://www.c-sharpcorner.com/UploadFile/ff2f08/filter-overrides-in-Asp-Net-mvc-5/

在 ASP.NET Core 2.1 中没有 OverrideAuthorization 属性,您唯一能做的就是使操作匿名,即使 Controller 不是匿名的。更多信息请访问https://learn.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-2.1

一种选择是这样做:

[Authorize(Roles = "Admin,Employee")] // admin or employee
public class XController : Controller
{
[Authorize(Roles = "Admin")] // only admin
public ActionResult ActionX() { ... }

[AllowAnonymous] // anyone
public ActionResult ActionX() { ... }
}

关于asp.net-mvc - 仅针对一项操作覆盖 Controller AuthorizeAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2071235/

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