Поскольку у вас есть только один пользователь, вам не нужно создавать зависимость от базы данных.Вы можете создать очень простой сервис авторизации на основе жестко закодированных учетных данных.Например,
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
, если вы хотите, чтобы действия вашего защищенного контроллера были когда-либо доступны.