Ролевый менеджер в Web.Config - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь разработать приложение 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>

В пути местоположения, если я использую что-то вроде, allow users = "my-user", работает нормально. Только пользователь имеет доступ. Тем не менее, я бы хотел, чтобы группа пользователей в моей группе получила доступ к странице. Я не знаю, как этого добиться. Я попробовал этот код, проведя некоторые исследования, но он не сработал. Что мне делать, чтобы получить доступ для всей группы?

Когда я пытаюсь войти, используя идентификатор из группы, это не работает. Любое предложение приветствуется. Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

В вашем примере ясно, что вы говорите о присоединенной к домену группе пользователей (входящей в интрасеть). В общем случае объекты групповой политики (GPO) и группы безопасности (SG) создаются в Active Directory (AD), и пользователи домена являются членами этих SG. В других случаях БД, размещенная на сервере БД, также может быть связана с теми же SG, а в некоторых случаях DB не связаны с какими-либо AD AD, но имеют другую учетную запись для дополнительной безопасности. Доступ к этим SGs осуществляется специалистами службы поддержки ИТ данной организации.

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

Сказав, что при использовании <allow users="*" /> в Web.config будут разрешены только пользователи домена, чьи учетные записи домена являются членами их соответствующих групп безопасности (SG), созданных для их организации в Active Directory (AD). Пока разрабатываемое приложение развертывается на сервере приложений, подключенном к одному домену, безопасность объектов групповой политики и SGS автоматически синхронизируется с пользователями и учетными записями компьютеров в этом домене. Поэтому только пользователи, являющиеся членами SG, могут получить доступ к приложению в интрасети.

0 голосов
/ 17 сентября 2018

Существуют разные способы достижения доступа по группам.Поскольку вы уже используете атрибуты, я бы предложил использовать следующий подход:

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

Когда вы хотите поместить логику в свой код, вы можете использовать такую ​​конструкцию:

if (Roles.IsUserInRole(userName, "ConfirmedUser")
{
    .....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...