ユーザーは1人だけなので、データベースの依存関係を作成する必要はありません。ハードコードされた資格情報に基づいて、非常に単純な認証サービスを作成できます。例えば、
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