0

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

但是现在链接已经变成了基于角色的,比如,

如果 IsProductPageAllowed=true,则只有用户可以看到 ProductPage。

如果 IsMediaPageAllowed=true 则只有用户可以看到 MediaPage。

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

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

我正在考虑一些更好的方法来做到这一点,比如在控制器本身中。

谢谢,

M。

4

2 回答 2

1

如果您使用的是 SimpleMembership,为什么不分配Roles给每个成员。这样,您可以这样做以限制对任何操作甚至整个控制器的访问。

[Authorize(Roles="Admin")] 
public ActionResult Contact()
{
   ViewBag.Message = "Your contact page.";
   return View();
}

使用上面的代码,只有管理员用户才能访问该操作。如果要限制整个控制器,只需放在[Authorize(Roles="Admin")]控制器名称的顶部即可。

如果您需要有关如何将角色植入数据库的帮助,请在此处阅读 Kevin 的博客

于 2013-02-13T08:11:19.243 回答
1

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

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

于 2013-02-13T08:31:44.820 回答