在何处授权访问控制器

时间:2009-10-01 11:42:33

标签: asp.net-mvc authorization

我的控制器上有以下过滤器:

[Authorize(Roles="Admin")]
public class AdminOnlyController : Controller
{ 
    // stuff 
}

我在工作中展示了几个人,我正在做什么,并且一些人声称授权不应该是财务主管的责任,这引发了一场激烈的辩论。根据Steven Sanderson的Pro ASP.NET MVC Framework一书,这是我学会这样做的方式。

除了错误之外,没有其他人能够建议应该如何完成。

是吗?还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

有两种分配授权的方法。控制器类或ActionResult。与你能做到的其他方式相反,我不太确定。

我并没有真正看到论证的一面,你认为反对控制器管理谁有权调用它。通过附近的授权,你遵循理论(我忘了名字)'尽可能接近你使用它的地方宣布它。'

这可能取决于同事的背景。如果他们真的习惯使用类似XML的东西,那么我敢打赌他们建议使用某种类型的配置文件 - 这似乎是由于更多企业类型的编程引起的。

另一方面,在其他地方(但在应用程序内)提取授权可能会有一些好处,因此它很容易修改,以防您最终添加“PaidUser”。在这种情况下,您不必去每个控制器进行更新。但是,我认为你最终陷入了一种全有或全无的方法 - 无论是在控制器中,还是在某些配置文件中。除非你创建一个方案,你的中央授权可以被控制器的授权覆盖,除非在那一点上,你很容易失去对谁管理什么的控制权,你最终会进入各种“授权汤”。

答案 1 :(得分:1)

简单的答案是肯定的 - 这是最好的方法。控制器的操作是对应用程序的所有请求的终点。将授权放在那里是完全合理的。

您可以将授权存储到IIS,但是当访问控制到文件(.aspx等)时,这可以更好地工作。现在我们有了一个MVC,你必须在一个控制器中控制对多个动作的访问。

相关问题