c# - 如何在 Controller 和操作级别使用授权属性?

标签 c# asp.net-mvc security

我已经实现了我自己的自定义授权属性。

该属性同时应用于 Controller 级别和操作级别。

这是我需要做的一个例子:

[ClaimsAuthorize(Roles = "AdvancedUsers")]
public class SecurityController : Controller
{
    [ClaimsAuthorize(Roles = "Administrators")]
    public ActionResult AdministrativeTask()
    {
        return View();
    }

    public ActionResult SomeOtherAction()
    {
        return View();
    }
}

目前,如果用户具有 Administrator 角色但没有 AdvancedUsers 角色,则他无法执行“管理任务”。

即使用户未在 Controller 级别获得授权,我如何更改此行为以在操作级别执行安全检查?

目前,我能想到的唯一解决方案是实现 2 个属性:一个用于保护 Controller ,另一个用于保护操作。然后我会使用 Order 属性首先在操作级别执行那个。

但是,如果可能的话,我更喜欢具有单个属性的解决方案。

最佳答案

使用内置的[OverrideAuthorization]:

[ClaimsAuthorize(Roles = "AdvancedUsers")]
public class SecurityController : Controller
{
    [OverrideAuthorization]
    [ClaimsAuthorize(Roles = "Administrators")]
    public ActionResult AdministrativeTask()
    {
        return View();
    }

    public ActionResult SomeOtherAction()
    {
        return View();
    }
}

OverrideAuthorization 属性可用于 MVC 5(至少)及更高版本。用它修饰 Action 后,还要用新的 Role 修饰,这将对 Controller 级别的 Role 生效。

关于c# - 如何在 Controller 和操作级别使用授权属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19403013/

相关文章:

php - 安全地发送纯文本密码?

c# - 需要帮助在类中创建/使用集合(C#、ASP.Net、MVC)

c# - RibbonControlsLibrary - 如何禁用最小化?

asp.net - 如何在route.config中订购多个路由?

c# - 浏览器关闭后Session变为空

security - SSL 真的值得吗?

c# - 适用于 LinkedIn 的 C# SDK

c# - 如何从 C# 中的 Main() 获取复杂的返回值

asp.net-mvc - 单声道 - 找不到 system.web.mvc

security - 如何加密 Erlang rpc 调用(和 Mnesia 复制)和其他流量?