2012-02-09 140 views
6

我正在将ASP.NET Web Forms中的应用程序迁移到ASP.NET MVC 3.其中一个中心和关键部分当前被锁定在其自己的目录中。ASP.NET MVC 3中的自定义授权

<location path="home" allowOverride="false"> 
    <system.web> 
    <authorization> 
     <deny users="?"/> 
     <allow users="*"/> 
    </authorization> 
    </system.web> 
</location> 

我的问题是,如何实现在ASP.NET MVC 3中的相同类型的安全性:我已经从通过使用我的web.config文件下面这个目录访问受限未授权的用户?我有一个预感,它涉及到在我的控制器类上设置属性。但是,AuthorizeAttribute看起来像只接受用户名列表,而不是验证状态(如果我错了,请纠正我)。我查看了ASP.NET Internet应用程序示例,但没有看到任何特殊的配置。

有人可以请指出我在这个正确的方向吗?

谢谢!

+0

看看我的问题的接受答案:http://stackoverflow.com/q/746998/1796 – 2012-02-09 16:05:31

回答

5

这是正确的,你会利用AuthorizeAttribute,像这样:

[Authorize] 
public ActionResult AuthenticatedUsers() 
{ 
    return View(); 
} 

[Authorize(Roles = "Role1, Role2")] 
public ActionResult SomeRoles() 
{ 
    return View(); 
} 

[Authorize(Users = "User1, User2")] 
public ActionResult SomeUsers() 
{ 
    return View(); 
} 

至于“权威性的地位”,我不知道我知道你的意思。听起来像Roles将处理该认证要求。

+0

'[Authorize]'attriute应该验证他们通常被认证。当我读到它时,OP就在寻找。我想他可能会觉得Roles参数是必需的。此外,应该注意的是,这些属性可以应用于控制器类本身,以完全相同的方式处理它们,而不必为每种方法定义它们。 – 2012-02-09 16:03:47

0

如果需要,您仍然可以在web.config中执行授权。大多数人会使用[授权]过滤器将其授权权限移至动作或整个控制器(或基础控制器)。

的授权过滤器支持角色或用户相同的web.config文件做(使用*和?的“认证”和“匿名”)

如果用户和角色不会为你做检查这篇文章上创建一个自定义授权属性:

ASP.NET MVC Custom Authorization

0

您将使用授权属性说哪些用户或角色将有权限访问控制器(如果你把一个控制器,这些权限会为此控制器中的所有操作设置)或一个操作。看:http://build.mt.gov/2011/10/27/aspnet-mvc3-and-the-authorize-attribute.aspx。谁将提供角色(来自特定用户)的Rembember将成为RoleProvider,就像您在asp.net webforms中使用的那样。