ASP.NET MVC:使用url限制访问

时间:2009-09-02 21:46:28

标签: asp.net-mvc url-routing filtering

我网站管理部分的网址始终以Admin/开头。 ASP.NET MVC中是否可以通过使用URL的这一部分来限制对用户的访问?

显然,我会将[Authorize(Roles = "Administrator")]保留在适当的控制器和操作上,但我想知道如果应用程序只是查看URL而不是单步执行代码,它是否会更快。

3 个答案:

答案 0 :(得分:2)

在Steven Sanderson的书中Pro ASP.NET MVC Framework找到答案。

将以下代码放入web.config文件中。

<location path ="Admin">
  <system.web>
    <authorization>
      <deny users="?"/>
      <allow roles="Administrator"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

这意味着对于匹配~/Admin/*的任何网址,应用程序将拒绝访问未经身份验证的访问者或 除了具有“管理员”角色的访问者之外的任何其他访问者。

答案 1 :(得分:1)

这样可行,但您可以将授权与当前的路由模型绑定。授权动作的美妙之处在于它从您当前使用的url结构中抽象出功能(实际上是您想要控制的内容)。

这也意味着您可以对此功能进行单元测试。

答案 2 :(得分:1)

您可以创建一个BaseAdminController,让所有管理控制器对此进行扩展:

[Authorize(Roles = "Administrator")]
public class BaseAdminController : Controller {
}

现在,如果你想通过网址,你已经做到了这一点,但是如果你只是在保证自己不确定它是什么,上面就是这样。然后,您进行测试可以确保Admin命名空间中的所有控制器都扩展此控制器。