我有一个MVC 3.0应用程序,里面有3个控制器和动作方法。 该应用程序是基于登录的。一旦用户通过身份验证,他就会登陆主页,在主页上他会看到3个菜单链接,这些链接被映射到三个控制器的操作方法。用户可以单击链接或在地址栏中输入URL,然后可以导航到相应的页面。
但现在这些链接已成为基于角色的,
如果IsProductPageAllowed = true,则只有用户才能看到ProductPage。
如果IsMediaPageAllowed = true,则只有用户才能看到MediaPage。
我已根据属性valuetrue / false在HomePage视图中轻松处理链接的可见性。
但是如果他直接输入地址栏中的url并且值为false,则正在寻找阻止用户访问ProductPage的正确方法。我可以通过检查true false属性轻松地在控制器的每个操作方法上执行此操作,并在值为false时重定向到homePage。
我正在考虑一些更好的方法,比如在Controller本身。
谢谢,
微米。
答案 0 :(得分:1)
如果您使用的是SimpleMembership,为什么不为每个成员分配Roles
。这样,您可以执行此操作来限制对任何操作甚至整个控制器的访问。
[Authorize(Roles="Admin")]
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
使用上面的代码,只有管理员用户才能访问该操作。如果要限制整个控制器,只需将[Authorize(Roles="Admin")]
置于控制器名称之上。
如果您需要有关如何将角色植入数据库的帮助,请阅读Kevin's Blog here
答案 1 :(得分:1)
定义一个自定义安全筛选器,它将拦截所有请求并在处理之前对其进行授权。如果授权不成功,用户将被重定向到“权限不足”的错误页面。
权限将取决于特定角色是否可以调用控制器的特定操作。如果用户未登录,还将有一个基本授权将用户重定向到登录页面。