【问题标题】:Role Manager in Web.ConfigWeb.Config 中的角色管理器
【发布时间】:2018-09-17 18:05:58
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    有不同的方法可以实现按组访问。由于您已经使用了属性,我建议您使用以下方法:

    [Authorize(Roles="Administrators")]
    public class AdminController : Controller
    {
        .....
    }
    

    当你想在你的代码中加入逻辑时,你可以使用这样的结构:

    if (Roles.IsUserInRole(userName, "ConfirmedUser")
    {
        .....
    }
    

    【讨论】:

      【解决方案2】:

      在您的示例中,很明显您在谈论加入域的用户组(Intranet 的一部分)。通常,组策略对象 (GPO) 和安全组 (SG) 在 Active Directory (AD) 中创建,域用户是这些 SG 的成员。 在其他情况下,托管在数据库服务器上的数据库也可以链接到相同的 SG,在某些情况下,数据库不链接到任何 AD SG,但具有不同的登录帐户以增加安全性。 对这些 SG 的访问由特定组织的 IT 支持专家管理。

              <authorization>
            <allow users="*" />
           </authorization>
      

      话虽如此,在 Web.config 中使用 &lt;allow users="*" /&gt; 时,将只允许其域帐户是其相应安全组 (SG) 成员的域用户,这些安全组 (SG) 是在 Active Directory (AD) 中为其组织创建的。只要正在开发的应用程序部署在加入同一域的应用程序服务器上,GPO 和 SG 安全性就会自动同步到该域的用户和计算机帐户。因此,只有 SG 的用户成员才能​​访问 Intranet 中的应用程序。

      【讨论】:

      • 感谢您的回复。是否可以限制这些安全组访问网页?我的意思是,假设有三个 SG(A、B、C),而我只希望一个 SG (A) 访问网页。有可能吗?
      • 一个小的 PowerShell 脚本将在为登录 UserAccount 的域启动应用程序时在幕后发挥作用:您只需添加一个 bool 值来确认登录的用户帐户是否存在于 SG(A ) 与否:Get-ADPrincipalGroupMembership '用户帐户名' |选择名称
      猜你喜欢
      • 2011-01-04
      • 2015-09-02
      • 2015-07-02
      • 2012-08-24
      • 1970-01-01
      • 2011-09-09
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多