Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在ASP.net MVC 2中放置多个不同角色的逻辑_Asp.net Mvc_Asp.net Mvc 2 - Fatal编程技术网

Asp.net mvc 如何在ASP.net MVC 2中放置多个不同角色的逻辑

Asp.net mvc 如何在ASP.net MVC 2中放置多个不同角色的逻辑,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,我对ASP.NETMVC有点陌生,我有点痛苦。我正在开发一个包含多个角色的网站,当然,用户获得的逻辑和gui取决于角色(duh) 此应用程序中有10个单独的角色。它们确实共享大部分相同的功能,但某些屏幕将根据它们所处的角色而有所不同 这是我的问题。我在互联网上读过的所有示例和教程,以及我一直在读的Apress书籍都展示了一个示例,说明了如何使用一个角色(管理员)实现角色,其中常见的方法是为站点的授权部分提供管理员控制器(甚至管理员区域)。但是,如果有10个角色呢?我真的需要编码10个独立的控制器

我对ASP.NETMVC有点陌生,我有点痛苦。我正在开发一个包含多个角色的网站,当然,用户获得的逻辑和gui取决于角色(duh)

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

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

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

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

你们中有人遇到过这种情况吗?如果有,你们是如何组织多个角色的逻辑的?将所有角色分离到单独的控制器?有几个控制器,但只对操作方法应用授权筛选?在视图或局部视图中应用角色筛选,而不使用控制器


不幸的是,关于如何实现多个角色,没有多少资源,我只想知道如何用分离逻辑的“正确”方式来实现

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

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


不管控制器分离如何,我肯定会使用局部视图来最小化类似代码的重复。当您需要维护代码时,您将获得好处。

对操作方法使用Authorize并应用操作所允许的角色

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

首先,根据实际的复杂性,我将重新考虑以下各项的组合:

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