如果我理解正确,我遇到了类似的问题。从您的问题看来,您没有使用默认的会员资格提供商(至少是这样)。我也没有。所以我所做的是创建一个新的授权属性。在您的情况下,它可能看起来像这样:
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 理论上应该重定向到登录页面。