2009-12-14 2 views
4

Я новичок в asp.net mvc и начинаю следующий проект. Компания хочет, чтобы внутрисетевой веб-сайт для различных групп людей загружал файлы в базу данных, запускал отчеты и исправлял данные в нескольких основных таблицах в базе данных. Компания использует Active Directory и не хочет, чтобы пользователи снова входили в систему, чтобы использовать веб-сайт. Веб-сайт будет иметь разные разделы для разных групп, и доступ пользователя к определенной странице должен контролироваться из базы данных.asp.net mvc аутентификация пользователя/разрешение

До сих пор это то, что я придумал

  1. изменил поставщика членства для связи с сервером Active Directory (based on Mike's blog post)
  2. удалены AccountController и/Просмотров счета папки
  3. созданного пользовательский класс проверки подлинности на основе this link

Мне нужно вытащить из таблицы в базе данных на основе идентификатора пользователя AD, его «роли "(int), затем переведите его в соответствующие SiteRoles. Будет ли реализован этот запрос в CustomAuthorizeAttribute? есть ли лучшее место, чтобы вытащить данные из таблицы и хранить их где-нибудь, чтобы их можно было повторно использовать, а не запускать запрос базы данных каждый раз, когда вызывается AuthorizeCore (что произойдет, когда пользователь вызывает контроллер/действие)?

ответ

4

Таможня AuthorizeAttribute определенно способ, как он будет применяться до все другие фильтры воздействия.

Kindness,

Dan

-1

Вы могли бы сделать все, что вы хотите с помощью MVC при условии FormAuthentication. Просто создайте свой собственный метод ValidateLogOn в AccountController. Пример:


public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl) 
     { 

      if (!ValidateLogOn(userName, password)) 
      { 
       return View(); 
      } 

      FormsAuth.SignIn(userName, rememberMe); 
      Session["userlogin"] = userName; 

      if (!String.IsNullOrEmpty(returnUrl)) 
      { 
       return Redirect(returnUrl); 
      } 
      else 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
     } 

Где ваш ValidateLogOn будет что-то вроде:


     private bool ValidateLogOn(string userName, string password) 
     { 
      if (String.IsNullOrEmpty(userName)) 
      { 
       ModelState.AddModelError("username", "You must specify a username."); 
      } 
      if (String.IsNullOrEmpty(password)) 
      { 
       ModelState.AddModelError("password", "You must specify a password."); 
      } 
      /* 
      * Do your LDAP Validation stuff (DB queries, etc) here. 
      */ 
     } 
+0

проблема - это требование, которое у меня есть - пользователям не нужно вводить свое имя пользователя или пароль, поскольку они уже вошли в систему AD на ваших компьютерах. – 2009-12-14 23:12:21

3

Я хотел бы использовать вне коробки ActiveDirectoryMembershipProvider, а не пользовательский атрибут (потому что изобретать колесо, как правило, плохо, и заново изобретать колесо в области безопасности в большинстве случаев плохо до степени некомпетентности) и AzMan Role Provider для группировки групп и учетных записей групп в роли приложений.

Это сопряжение дает вам гораздо больше возможностей (например, стандартизованный интерфейс GUI для разрешений), чем собственный код, и, вероятно, более безопасен.

Смежные вопросы