如何在ASP.net MVC 2中为几个不同的角色放置逻辑

时间:2010-09-25 17:09:46

标签: asp.net-mvc asp.net-mvc-2

我对ASP.NET MVC有点新意,我有点痛苦。我正在开发一个有几个角色的网站,当然用户获得的逻辑和gui取决于角色(duh)。

此应用程序中有10个不同的角色。它们共享大部分相同的功能,但某些屏幕将根据它们所处的角色而有所不同。

继承我的问题。我在互联网上阅读的所有示例和教程以及我一直在阅读的Apress书籍都展示了如何使用一个角色(Admin)实现角色的示例,其中常见的方法是提供管理员控制器(甚至是管理区域)对于网站的授权部分。但是,如果有10个角色怎么办?我真的需要编写10个独立的控制器吗?

让我通过详细说明正在开发的内容来帮助解决问题。将有一个菜单,菜单项将根据他们能够和不能获得的视图(或页面)的角色进行过滤。 根据他们的选择,它将为他们提供一个受限制的视图(或授权页面),从内部提供过多的功能仅限于该角色。

我知道有几种不同的方法可以做到这一点,我只是想知道什么是推荐或“干净”的方式。

你们有没有遇到过这种情况,如果是这样,你们是如何组织多个角色的逻辑的?将所有角色分开到单独的控制器?有几个控制器,但只是对动作方法应用授权过滤?在视图或部分视图中应用角色过滤并将控制器单独保留?

不幸的是,如何在那里实现多个角色的资源很少,我只想知道如何在分离逻辑方面采用“正确”的方式。

2 个答案:

答案 0 :(得分:0)

我会将功能部分放入部分视图中。每个网站都有一个控制器,并根据角色和应该公开的内容加载部分视图。

如果你有太多的差异,我只会偏离它,就像管理员可能有的那样。然后我通常会创建一个区域来封装该功能。

无论控制器分离如何,我肯定会使用部分视图来最小化类似代码的重复。当您需要维护该代码时,您将获益。

答案 1 :(得分:0)

对操作方法使用授权并应用操作允许的角色。

根据适用于该方案的内容,从控制器构建可用操作列表,并将其作为视图模型的一部分发送到视图。在某些情况下,它更适合发送一个更简单的视图模型,告诉视图是否允许每个操作,即CanDelete,CanEdit,CanViewDetailedInfo等。

我从这开始,并根据实际复杂性重新考虑任何组合:

  • 一个ActionFilter,它填充可用的操作/而不是在控制器中显式执行它
  • 使用反射器查找授权中应用的角色列表/因此您只需指定一次角色
  • 您自己的html帮助程序,将授权考虑在内。因此,当您声明一个操作链接时,它仅在支持该操作时输出。