在控制器级别按角色访问

时间:2015-03-17 06:11:55

标签: model-view-controller controller authorization

MVC是否可以允许整个控制器被1个角色<​​strong>访问,除了另一个角色可以访问一个或几个方法?

除方法3外,所有方法都属于员工,客户和员工均可访问。如下所示:

    [Authorize(Roles = "staff")]
    public class StaffController : Controller
    {
        public StaffController()
        {
        }
        public ActionResult Method1()
        {
        }
        public ActionResult Method2()
        {
        }
        [Authorize(Roles = "staff, customer")]
        public ActionResult Method3()
        {
        }
    }

或者其他所有属于员工的情况,除了Method3,客户可以独家访问,如下所示:

    [Authorize(Roles = "staff")]
    public class StaffController : Controller
    {
        public StaffController()
        {
        }
        public ActionResult Method1()
        {
        }
        public ActionResult Method2()
        {
        }
        [Authorize(Roles = "customer")]
        public ActionResult Method3()
        {
        }
    }

然而,上述不行。在这两种情况下,客户仍然无法访问Method3。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我怀疑它首先检查控制器授权,因此永远不会有机会检查授权的具体操作。

一种解决方案是在类级别授权这两个角色,并将特定方法的访问权限限制为staff

e.g。

[Authorize(Roles="staff,customer")]
public class StaffController : Controller
{
    [Authorize(Roles="staff")]
    public StaffController()
    {
    }
    [Authorize(Roles="staff")]
    public ActionResult Method1()
    {
    }
    [Authorize(Roles="staff")]
    public ActionResult Method2()
    {
    }
    public ActionResult Method3()
    {
    }
}

另一种选择是Restrict(即与Authorize相反),使用类似此答案的自定义属性ASP.NET MVC: Opposite of [Authorise] 但正如他们所说,这与MVC安全的“默认拒绝”主体相违背。