C# 如何在MVC2中进行授权?

C# 如何在MVC2中进行授权?,c#,asp.net-mvc,asp.net-mvc-2,authorization,C#,Asp.net Mvc,Asp.net Mvc 2,Authorization,如何在MVC2中进行授权 我希望使用广告组/角色,而不是提供的默认组/角色。这似乎是“AspNetSqlMembershipProvider” 无论如何,我说: [Authorize(Users = "username")] public ActionResult About() { ViewData["Welcome"] = "Welcome About"; return View(); } 然

如何在MVC2中进行授权

我希望使用广告组/角色,而不是提供的默认组/角色。这似乎是“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>
第34行:
第35行:
第36行:,但在创建自定义类
AuthorizationAttribute
扩展
ActionFilterAttribute
ContextCache之后,IoC和许多其他问题都无法解决,也不确定从哪里着手。我也读过,它建议我换一种方式去做,开始感到困惑

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

附加问题:假设我在页面上有一个“编辑”按钮。我可以添加逻辑来决定是否基于授权呈现此按钮吗

谢谢你的帮助


编辑:一些进一步的信息

我不打算阻止或允许所有人访问本网站

我打算拥有3个不同访问级别的基本用户组,即超级管理员、管理员、, 基本访问

将没有登录表单,当用户访问该站点时,我们将检查该用户是哪个组的成员-然后页面将基于此进行呈现


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

好吧,你可以通过网络配置限制对网站的访问

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

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

在IIS中,您需要禁用anon访问并启用windows身份验证

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

额外答案:要检查代码中的身份验证和授权,您可以从控制器中使用以下选项之一:

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

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

首先,服务器必须加入到您的域中。如果有防火墙的话,它必须有免费的广告访问权限

第二,您必须能够使用弹出对话框进行登录,而不是使用基于表单的登录


如果您需要带表单登录的广告,则需要更多的工作。您能更具体地说明您的需求吗?

这是全有或全无的方法吗?我的要求比这更复杂。某些操作/活动/按钮不应该对某些用户可用-这种区别是通过广告组来实现的。我不想要任何表单登录。服务器位于域中,具有AD访问权限。弹出窗口很好-我想你的意思是当他们打开浏览器时弹出提示。虽然我认为如果他们在用户授权的环境下运行浏览器,他们可能不会得到弹出窗口。因此,该网站将不会有登录表单。用户点击后,我们将根据其所属的组检查并允许某些操作活动,即超级管理员、管理员、基本用户…@baron-如果您使用的是Internet Explorer,并且用户和服务器都在同一域中,则在大多数情况下是,您将不会获得登录框,身份验证可以无缝进行。但是,这对其他浏览器不起作用,它们将获得弹出窗口。更重要的是,将此代码放在视图中以呈现或不呈现某些控件,即基本访问组中的用户的删除按钮…谢谢-该链接帮助很大。你知道我是如何定制“未授权”页面的吗?“默认情况下,当使用ASP.NET开发服务器时,您只需获得一个空白页。该页具有401未授权HTTP响应状态。”是的,您可以编写自己的授权属性,从标准属性派生,并重写HandleUnauthorizedRequest方法。有关详细信息,请参阅。