Web.Config中的角色管理器

时间:2018-09-17 18:05:59

标签: c# asp.net-mvc

我正在尝试开发一个视图很少的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登录时,它不起作用。任何建议表示赞赏。谢谢!

2 个答案:

答案 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中的应用程序。