gpt4 book ai didi

asp.net-mvc - ASP.net MVC - 为一个用户/角色授权 Controller ,但为所有用户授权一个操作

转载 作者:行者123 更新时间:2023-12-04 10:36:53 26 4
gpt4 key购买 nike

我有一个这样的 Controller :

[Authorize(Users="Admin")]
public class MyController : Controller
{
...

[AllowAnonymous]
public AllUsersAction()
{

}
}

除了我确实想授权 AllUsersAction ,只有所有授权用户才能点击它,而不仅仅是管理员。

该怎么办?

编辑:我知道我可以授权整个 Controller ,并为所有应该只对 Admin 可用的操作提供更多限制。 .但我宁愿不把属性放在每一个 Action 上,而是一个。

这个问题可以更好地表述:如果目前不可能实现这种“极简主义”,那么实现是什么样的?

最佳答案

对 Controller 使用不带任何参数的 Authorize 属性:

[Authorize]
public class MyController : Controller
{
...
public AllUsersAction()
{

}

[Authorize(Users="Admin")]
public ActionResult OnlyForAdmin()
{
}

}

并为受限操作指定授权属性角色/用户属性。

不幸的是, Controller 上的 Authorize 属性仅在操作具有 AllowAnonymous 属性时才绕过授权。幸运的是,如果操作具有自己的 Authorize 属性,您可以覆盖 Authorize 属性的 OnAuthorization 方法以跳过 Controller Authorize 属性中的授权检查:
public class CustomAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if(filterContext.ActionDescriptor.IsDefined(typeof(AuthorizeAttribute), true))
{
//skip authorization check if action has Authorize attribute
return;
}

base.OnAuthorization(filterContext);
}
}

您可以在示例中使用此 CustomAuthorize:
[CustomAuthorize(Users="Admin")]
public class MyController : Controller
{
...

[Authorize]
public AllUsersAction()
{

}
}

关于asp.net-mvc - ASP.net MVC - 为一个用户/角色授权 Controller ,但为所有用户授权一个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30103963/

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