私が正しく理解していれば、同様の問題がありました。あなたの質問から、デフォルトのメンバーシッププロバイダーを使用していないようです(少なくともそのままです)。私もしませんでした。そこで私がしたことは、新しい認可属性を作成することでした。あなたの場合、次のようになります。
public class AdminOnlyAttribute : AuthorizeAttribute {
IUserRepository _UserRepository;
public SimpleUser SimpleUser { get; set; }
public AdminOnlyAttribute() {
_UserRepository = new SqlUserRepository(new DbContext());
}
protected override bool AuthorizeCore(HttpContextBase httpContext) {
bool baseAuthorized = base.AuthorizeCore(httpContext);
if (!baseAuthorized) {
return false;
}
//Here you use your repository to check if a user is an admin or not
bool isAdmin = _UserRepository.IsAdmin(int.Parse(httpContext.User.Identity.Name));
if (!isAdmin) {
return false;
}
return true;
}
}
リポジトリ メソッド IsAdmin は、提供されたユーザーの ID に対応するブール値をチェックするクエリと同じくらい簡単です。このようなもの(必要かどうかを再確認してくださいSingleOrDefault()):
public bool IsAdmin(int userID) {
bool isAdmin = (from user in db.Users
where user.ID == userID
select user.isAdmin).SingleOrDefault();
return isAdmin;
}
そして、これを次のように必要なアクションで使用します。
[AdminOnly]
public ActionResult Index(){
//Code here...
}
これが false を返す場合、ActionResult は HttpUnauthorizedResult になり、理論上はログイン ページにリダイレクトされます。