在ASP.NET中,以下是最佳实践:
- 根据您的权限显示特定的控件?
- 对于GridView控件,如何根据您的角色显示特定列?
与其实际使用角色来隐藏/显示某些控件,我建议为每个角色添加另一层权限,并根据这些权限来显示/隐藏。
这样,您可以重新定义角色的权限,而无需更改代码。
此外,这使您能够在将来创建新的角色并仅分配一组权限给该角色。
至于控件,是的...我会根据user.IsInRole("permissionname")值设置控件的Visible属性。
对于网格,我会做同样的事情...将列的可见性设置为IsInRole布尔值。
//Delete Icon Column
gridViewContacts.Columns[0].Visible = user.IsInRole("DeleteAnyContact");
我建议你按照非常细致的方式创建权限,例如:
如果您选择基于角色的路线,ASP.NET(自2.0版本以来)提供了各种成员控件,这些控件可能有助于解决此场景。假设(这可能是一个错误的假设),您正在使用内置成员提供程序,则实际上可以使用LoginView
控件来处理#1。
它的工作方式是LoginView
可以使用RoleGroups
及其关联的ContentTemplates
根据角色为用户自定义视图。这与内置成员提供程序无缝配合;我相信,如果您基于Microsoft技术构建自己的成员提供程序,它也将起作用。(我没有执行过后者。)
理论上,您可以将其用于#2,但这将导致重复的代码和工作量,这不是我的个人首选项。我认为,您选择使用特定于角色的SQL视图来驱动该表可能比此选项更好。(当然,还有其他选项可能更好。)
我赞同 Elijah Manor 的建议,使用权限而不是角色。一般来说,这也是我的首选。 (我很惊讶地发现成员提供程序技术没有达到那个级别。)但在任何以权限为中心的场景中,您基本上都必须自己编写所有内容。(我已经做过这个,虽然非常灵活,但保护任何给定页面的代码可能会变得复杂。)
编辑:我很抱歉;我打算包含 LoginView 控件的链接。DotNetJunkies 上有一个 tutorial。