如果特定变量具有特定值,MVC将阻止对控制器方法的访问

时间:2016-08-15 15:40:35

标签: c# asp.net-mvc

我试图弄清楚如果用户未登录或不是管理员,如何阻止访问控制器的方法。我有一个包含变量的类,用于跟踪用户和他的状态(登录,管理员等)。

我认为可以使用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);
    }
}

1 个答案:

答案 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中。