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。
非常感谢任何帮助!
答案 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安全的“默认拒绝”主体相违背。