如何在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',可以使用所有操作/按钮。我怎么能做到这一点?
答案 0 :(得分:1)
仍在您的控制器/操作上使用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身份验证