我试图弄清楚如果用户未登录或不是管理员,如何阻止访问控制器的方法。我有一个包含变量的类,用于跟踪用户和他的状态(登录,管理员等)。
我认为可以使用ValidationAttribute
来完成。我之前没有使用过这种技术,所以我可能做错了。
AccountController.CS
[AdminUserValidation]
public ActionResult Index()
{
var account1 = account.GetAccountsWithType();
return View(account1.ToList());
}
AdminUserValidation.CS
public class AdminUserValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (UserSession.Current.IsAdmin)
{
//Allow access to the controller's method
}
else
{
//Prevent access to the controller's method and show error page (bad request/forbidden)
}
base.OnActionExecuting(filterContext);
}
}
答案 0 :(得分:1)
此功能已经是用户角色,您需要使用UserManager为每个用户分配一个角色,如下所示:
User user = UserManager.FindById(userID);
UserManager.AddToRole(userID, roleID);
您可以创建角色ID,有一个名为“AspNetRoles”的默认表,它将存储roleID,AddToRole会将记录插入“AspNetUserRoles”。
然后在您的控制器中,您可以指定哪些角色应该能够访问整个控制器或单个方法。
[Authorize(Roles = "Admin")]
public class AdminController : Controller
{
...
}
用户需要注销并重新登录才能使角色生效,因为它存储在Cookie中。