Очень простой однопользовательский вход в ASP.NET MVC2? - PullRequest
3 голосов
/ 18 июня 2011

Я создаю свой сайт и хочу ограничить часть моего сайта (части администратора) обычным общедоступным отображением.

  • Я использую LINQ для доступа к базе данных.
  • У меня есть класс Service для обработки вызовов в базу данных через LINQ
  • У меня работает весь сайт, кроме части «Вход».

До сих пор я только был в состоянии найти примеры с использованием MembershipProvider и / или RoleProviders и т. Д. И, честно говоря, это кажется слишком большой работой для того, что я хочу. Все, что нужно сделать - это позволить вам ввести правильный пароль в поля ввода.

Могу ли я не избегать Провайдеров?

Ответы [ 4 ]

6 голосов
/ 18 июня 2011

Поскольку у вас есть только один пользователь, вам не нужно создавать зависимость от базы данных.Вы можете создать очень простой сервис авторизации на основе жестко закодированных учетных данных.Например,

public class AuthorizationService{
     private AuthorizationService(){}
     public static readonly AuthorizationService Instance = new AuthorizationService();

     private const string HardCodedAdminUsername = "someone";
     private const string HardCodedAdminPassword = "secret";
     private readonly string AuthorizationKey = "ADMIN_AUTHORIZATION";

     public bool Login(string username, string password, HttpSessionStateBase session){
         if(username.ToLowerInvariant().Trim()==HardCodedAdminUsername && password.ToLowerInvariant().Trim()==HardCodedAdminPassword){
              session[AuthorizationKey] = true;
              return true;
         } 
         return false;
     }

     public void Logout(HttpSessionStateBase session){
        session[AuthorizationKey] = false;
     }

     public bool IsAdmin(HttpSessionStateBase session){
         return session[AuthorizationKey] == true;
     }
}

Затем вы можете создать пользовательский IAuthorizationFilter, например:

public class SimpleAuthFilterAttribute: FilterAttribute, IAuthorizationFilter{
     public void OnAuthorization(AuthorizationContext filterContext){
         if(!AuthorizationService.Instance.IsAdmin(filterContext.HttpContext.Session)){
              throw new UnauthorizedAccessException();
         }
     }
}

Затем все, что вам нужно сделать, это украсить действия защищенного контроллера с помощью SimpleAuthFilter иВаш логин приложения внезапно работает.Ура!( Обратите внимание, я написал весь этот код в окне ответов StackOverflow, поэтому вам может потребоваться очистить опечатки и т. Д., Прежде чем он действительно заработает )

Также ,Вы можете изменить его, чтобы пропустить имя пользователя, если считаете это ненужным.Вам нужно создать действие контроллера для Login и Logout, которое выполняет соответствующие вызовы для AuthorizationService, если вы хотите, чтобы действия вашего защищенного контроллера были когда-либо доступны.

3 голосов
/ 18 июня 2011

Стоит создать легкого провайдера членства с минимальной реализацией; Методы GetUser, ValidateUser и т. Д. Вам не нужно реализовывать все это. Это просто помогает с авторизацией страниц и проверкой User.Identity и т. Д. При необходимости. Вам также не нужен RoleProvider или ProfileProvider для этого.

Его также можно масштабировать на будущее.

UPDATE

Вам просто нужно реализовать основные методы для проверки и получения пользователя и вставить свой собственный код проверки / доступа к данным.

Как то так ...

Настройки web.config:

<membership defaultProvider="ApplicationMembershipProvider">
      <providers>
        <clear/>
        <add name="ApplicationMembershipProvider" type="YourNamespace.ApplicationMembershipProvider"/>
      </providers>
    </membership>

Код входа:

if (Membership.ValidateUser(username, password))
            {
                FormsAuthentication.SetAuthCookie(username, false);
}
0 голосов
/ 19 июня 2011

@ KristianB некоторое время назад я дал ответ на этот ТАК вопрос .Я считаю, что это может быть полезно, так как это очень просто реализовать и в то же время это лучше, чем жесткое кодирование имени пользователя и пароля в вашем коде.

Удачи!

0 голосов
/ 18 июня 2011

Вы можете установить статус (вошли или нет) в переменной сеанса.Установите для переменной значение true, если пользователь ввел правильный пароль, а затем на каждой странице, для которой вы хотите ограничить доступ, проверьте, является ли переменная истинной.

...