2009-09-02 113 views
3

我的网站的管理部分的URL始终始于Admin/。是否有可能在ASP.NET MVC中通过使用这部分URL来限制对用户的访问?ASP.NET MVC:使用URL限制访问

显然我会保持[Authorize(Roles = "Administrator")]适当的控制器和操作,但我不知道如果它可以只看URL而不是步入代码将更快的应用程序。

回答

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/*任何URL,应用程序将拒绝访问比那些角色“管理员”等未经验证的游客或 任何其他游客。

1

这将工作,但您然后将授权绑定到您当前的路由模型。授权操作的优点在于,它从您当前使用的url结构中抽象出了功能(实际上是您想要控制的功能)。

这也意味着你可以单元测试这个功能。

+0

那么使用URL进行授权有什么好处吗? – ajbeaven 2009-09-03 20:34:51

1

您可以创建一个BaseAdminController,其所有的管理控制器的扩展这个:

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

现在,如果你通过URL想要的话,你做的已经是正确的,但如果你只是为自己节省作出确定它的一切,上面是方式。然后,测试可以确保Admin命名空间中的所有控制器扩展此控制器。