基于角色为网站实现不同视图的最佳方法是什么?

4
在ASP.NET中,以下是最佳实践:
  1. 根据您的权限显示特定的控件?
  2. 对于GridView控件,如何根据您的角色显示特定列?
我认为对于第二个问题,可以从数据库中选择与角色相关的视图来获取数据。
2个回答

5

与其实际使用角色来隐藏/显示某些控件,我建议为每个角色添加另一层权限,并根据这些权限来显示/隐藏。

这样,您可以重新定义角色的权限,而无需更改代码。

此外,这使您能够在将来创建新的角色并仅分配一组权限给该角色。

至于控件,是的...我会根据user.IsInRole("permissionname")值设置控件的Visible属性。

对于网格,我会做同样的事情...将列的可见性设置为IsInRole布尔值。

//Delete Icon Column
gridViewContacts.Columns[0].Visible = user.IsInRole("DeleteAnyContact"); 

我建议你按照非常细致的方式创建权限,例如:

  • 查看任何联系人
  • 查看自己的联系人
  • 编辑自己的联系人
  • 编辑任何联系人
  • 添加任何联系人
  • 删除自己的联系人
  • 删除任何联系人
  • 等等...

1

如果您选择基于角色的路线,ASP.NET(自2.0版本以来)提供了各种成员控件,这些控件可能有助于解决此场景。假设(这可能是一个错误的假设),您正在使用内置成员提供程序,则实际上可以使用LoginView控件来处理#1。

它的工作方式是LoginView可以使用RoleGroups及其关联的ContentTemplates根据角色为用户自定义视图。这与内置成员提供程序无缝配合;我相信,如果您基于Microsoft技术构建自己的成员提供程序,它也将起作用。(我没有执行过后者。)

理论上,您可以将其用于#2,但这将导致重复的代码和工作量,这不是我的个人首选项。我认为,您选择使用特定于角色的SQL视图来驱动该表可能比此选项更好。(当然,还有其他选项可能更好。)

我赞同 Elijah Manor 的建议,使用权限而不是角色。一般来说,这也是我的首选。 (我很惊讶地发现成员提供程序技术没有达到那个级别。)但在任何以权限为中心的场景中,您基本上都必须自己编写所有内容。(我已经做过这个,虽然非常灵活,但保护任何给定页面的代码可能会变得复杂。)

编辑:我很抱歉;我打算包含 LoginView 控件的链接。DotNetJunkies 上有一个 tutorial


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接