我网站管理部分的网址始终以Admin/
开头。 ASP.NET MVC中是否可以通过使用URL的这一部分来限制对用户的访问?
显然,我会将[Authorize(Roles = "Administrator")]
保留在适当的控制器和操作上,但我想知道如果应用程序只是查看URL而不是单步执行代码,它是否会更快。
答案 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命名空间中的所有控制器都扩展此控制器。