C# 如何在MVC2中进行授权?
如何在MVC2中进行授权 我希望使用广告组/角色,而不是提供的默认组/角色。这似乎是“AspNetSqlMembershipProvider” 无论如何,我说: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(); } 然
[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方法。有关详细信息,请参阅。