ASP.NET MVC 3中的自定义授权

6

我正在将一个ASP.NET Web Forms应用程序迁移到ASP.NET MVC 3。其中一个核心且关键的部分目前被锁在自己的目录中。我已经在web.config文件中使用以下内容限制未经授权的用户访问此目录:

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

我的问题是,如何在ASP.NET MVC 3中实现同样类型的安全性?我猜测它涉及在我的控制器类上设置属性。但是,AuthorizeAttribute看起来只接受用户名称列表而不是身份验证状态(如果我错了,请纠正我)。我查看了示例ASP.NET互联网应用程序,但没有看到任何特殊配置。

请问有人可以指点我正确的方向吗?

谢谢!


请查看我的问题的被接受答案:https://dev59.com/anRB5IYBdhLWcg3wAjXR - Andrei Rînea
3个回答

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();
 }

关于“认证状态”,我不确定你的意思。看起来角色会处理这个认证需求。

[Authorize] 属性应该验证用户是否已经通过身份验证。根据我的理解,这就是 OP 所寻找的。我认为他可能误以为 Roles 参数是必需的。此外,应该注意到这些属性可以应用于控制器类本身,以便以相同的方式处理它们,而不必为每个方法定义它们。 - Joel Etherton

0

如果您愿意,仍然可以在 web.config 中进行授权。大多数人会使用 [Authorize] 过滤器将其授权权限移动到操作或整个控制器(或基本控制器)。

Authorize 过滤器支持角色或用户,与 web.config 相同(使用 * 和 ? 代表“已验证”和“匿名”)

如果用户和角色无法满足您的需求,请查看此文章以创建自定义授权属性:

ASP.NET MVC 自定义授权


0

您将使用授权属性来指定哪些用户或角色有权限访问控制器(如果您放置在控制器中,这些权限将设置为此控制器中的所有操作)或操作。请参阅:http://build.mt.gov/2011/10/27/aspnet-mvc3-and-the-authorize-attribute.aspx。请记住,提供您的角色(从特定用户)的将是一个RoleProvider,就像您在asp.net webforms中使用的一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接