在mvc中控制Controller的Action方法的可访问性

时间:2013-02-13 07:49:06

标签: asp.net asp.net-mvc-3 c#-4.0 controller

我有一个MVC 3.0应用程序,里面有3个控制器和动作方法。 该应用程序是基于登录的。一旦用户通过身份验证,他就会登陆主页,在主页上他会看到3个菜单链接,这些链接被映射到三个控制器的操作方法。用户可以单击链接或在地址栏中输入URL,然后可以导航到相应的页面。

但现在这些链接已成为基于角色的,

如果IsProductPageAllowed = true,则只有用户才能看到ProductPage。

如果IsMediaPageAllowed = true,则只有用户才能看到MediaPage。

我已根据属性valuetrue / false在HomePage视图中轻松处理链接的可见性。

但是如果他直接输入地址栏中的url并且值为false,则正在寻找阻止用户访问ProductPage的正确方法。我可以通过检查true false属性轻松地在控制器的每个操作方法上执行此操作,并在值为false时重定向到homePage。

我正在考虑一些更好的方法,比如在Controller本身。

谢谢,

微米。

2 个答案:

答案 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)

定义一个自定义安全筛选器,它将拦截所有请求并在处理之前对其进行授权。如果授权不成功,用户将被重定向到“权限不足”的错误页面。

权限将取决于特定角色是否可以调用控制器的特定操作。如果用户未登录,还将有一个基本授权将用户重定向到登录页面。