を開始するには良い場所です。あなたの質問から、あなたが(少なくとも現状のままで)デフォルトメンバーシッププロバイダを使用していないようです。私はどちらもしなかった。だから、私がしたのは新しい認可属性を作成することでした。リポジトリメソッドIsAdminが供給されるユーザのIDに対応するブール値をチェックするために、クエリのような単純なものでした
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;
}
}
:あなたのケースでは、このようなものを見ることができます。この(SingleOrDefault()
が必要であるかどう再確認してください)のようなもの:
public bool IsAdmin(int userID) {
bool isAdmin = (from user in db.Users
where user.ID == userID
select user.isAdmin).SingleOrDefault();
return isAdmin;
}
そして、あなたがそうのようにしたいのアクションでこれを使用します。これはfalseを返した場合、あなたのActionResultはなり
[AdminOnly]
public ActionResult Index(){
//Code here...
}
理論的にはログインページにリダイレクトする必要があるHttpUnauthorizedResultです。
フィードバックに感謝します。私はリポジトリメソッドIsAdminがどのように見えるべきかについてはっきりしていませんが、また、私はメソッドが戻り値の型を持っている必要があります:public AuthorizeAttribute() – Tim
@Tim私がコンストラクタで間違いをしたためにあなたが得ているエラーがあります。それはAuthorizeRAttributeと呼ばれ、クラスはAdminOnlyAttributeと呼ばれる参照してください。それをAdminOnlyAttributeに変更してください。その方法については、私の答えを更新するつもりです。 –
ありがとうございます。では、ActionResultでは、ユーザーがadminの場合は条件付きですべきですか? – Tim