我正在尝试开发一个视图很少的ASP.NET MVC应用程序。我为控制器使用以下代码来限制用户访问权限:
控制器:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (!string.IsNullOrEmpty(model.ReturnUrl))
return Redirect(model.ReturnUrl);
return RedirectToAction("Edit", "Home");
}
ModelState.AddModelError("Password", "The user name or password provided is incorrect");
}
// if we got this far, something failed, redisplay form
return View(model);
}
在Web.Config中:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Home/Login" timeout="10" />
</authentication>
<authorization>
<allow users="*" />
</authorization>
<membership defaultProvider="LabourTimeProvider">
<providers>
<clear />
<add name="LabourTimeProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="LabourTime" attributeMapUsername="sAMAccountName" />
</providers>
</membership>
<roleManager defaultProvider="CustomRoleProvider" >
<providers>
<clear />
<add name="CustomRoleProvider" type="LabourTime.CustomRoleProvider" />
</providers>
</roleManager>
</system.web>
<location path="Home/Login">
<system.web>
<authorization>
<allow roles="mydomain\mygroup" />
<deny users="*" />
</authorization>
</system.web>
</location>
<location path="Home/Edit">
<system.web>
<authorization>
<allow roles="mydomain\mygroup" />
<deny users="*" />
</authorization>
</system.web>
</location>
在位置路径中,如果我使用类似的方法, 允许用户=“我的用户”,它工作正常。只有用户可以访问。 但是,我希望mygroup中的一组用户可以访问该页面。我不知道该如何实现。我通过做一些研究尝试了这段代码,但是没有用。为了获得整个小组的访问权,我该怎么做?
当我尝试使用组中的ID登录时,它不起作用。任何建议表示赞赏。谢谢!
答案 0 :(得分:0)
有多种方法可以实现按组访问。由于您已经使用过属性,因此建议您使用以下方法:
[Authorize(Roles="Administrators")]
public class AdminController : Controller
{
.....
}
当您想在代码中放入逻辑时,可以使用如下结构:
if (Roles.IsUserInRole(userName, "ConfirmedUser")
{
.....
}
答案 1 :(得分:0)
在您的示例中,很明显,您正在谈论加入域的用户组(Intranet的一部分)。通常,在Active Directory(AD)中创建组策略对象(GPO)和安全组(SG),并且域用户是这些SG的成员。 在其他情况下,托管在DB Server上的DB也可以链接到相同的SG,在某些情况下,DB不链接到任何AD SG,但是具有不同的登录帐户以增加安全性。 由指定组织的IT支持专家管理对这些SG的访问。
<authorization>
<allow users="*" />
</authorization>
已经说过,在Web.config中使用<allow users="*" />
时,将只允许其域帐户是其相应的安全组(SG)成员的域用户,这些用户是为其组织在Active Directory(AD)中创建的。只要将要开发的应用程序部署在加入同一域的应用程序服务器上,GPO和SG的安全性就会自动同步到该域的用户和计算机帐户。因此,只有SG的用户才能访问Intranet中的应用程序。