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