我如何在MVC 2中进行授权?

时间:2011-08-04 07:35:34

标签: c# asp.net-mvc asp.net-mvc-2 authorization

如何在MVC 2中进行授权?

我想使用AD组/角色而不是提供的默认值。这似乎是“AspNetSqlMembershipProvider”。

无论如何我放了:

[Authorize(Users = "username")]
        public ActionResult About()
        {
            ViewData["Welcome"] = "Welcome About";

            return View();
        }

然后加载页面给我:找不到连接名称'ApplicationServices' 应用程序配置或连接字符串为空。

Line 34:       <providers>
Line 35:         <clear />
Line 36:         <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
Line 37:       </providers>
Line 38:     </membership>

我看了this stackoverflow,但在创建自定义类AuthorizationAttribute扩展ActionFilterAttribute ContextCache后,IoC和其他一些东西无法解决,而且不确定从哪里开始。我也读过this stackoverflow,它建议采取不同的方式,开始感到困惑。

如何在MVC应用程序中使用AD组而不是AspNetSqlMembershipProvider

奖金问题:说我有一个页面的“编辑”按钮。我可以添加逻辑来决定是否根据授权来呈现此按钮吗?

感谢您的帮助。


修改:更多信息。

我不打算阻止或允许所有访问此站点。

我打算让3个基本用户组区分访问级别,即Super Admin,Admin, 基本访问。

没有登录表单,当用户点击网站时我们会检查用户所属的组 - 然后根据该页面呈现页面。

因此,例如,“基本访问”组中的用户“bob”将点击该页面,并且禁用“编辑”,“删除”等按钮/操作,因此基本上是只读组。但是“超级管理员”组中的用户'jim',可以使用所有操作/按钮。我怎么能做到这一点?

3 个答案:

答案 0 :(得分:1)

您应该查看Windows Authentication

仍在您的控制器/操作上使用Authorize属性,但将您的站点配置为使用Windows身份验证。

奖励回答:要检查代码中的身份验证和授权,您可以从控制器中使用以下其中一项:

this.User.Identity.IsAuthenticated
this.User.Identity.Name
this.User.IsInRole("roleName")

答案 1 :(得分:1)

使用Windows身份验证的答案很有用,但需要注意以下几点。

首先,服务器必须加入您的域。如果有防火墙,它必须具有免费的AD访问权限。

其次,你必须要有一个用于登录的弹出对话框,而不是使用基于表单的登录。

如果你需要AD表格登录,那么还需要做更多的工作。你能更具体地了解你的需求吗?

答案 2 :(得分:0)

好吧,您可以通过webconfig限制对网站的访问。

    <authentication mode="Windows" />
    <authorization>
        <allow roles="[YOURADSERVER]\[YOUR AD GROUP]"/>
        <deny users="*"/>
    </authorization>

这将阻止在给定广告组中未列出的任何其他广告。

在IIS中,您需要禁用匿名访问并启用Windows身份验证