在ASP.NET中,执行以下操作的最佳方法是什么:
我想的是数字2,数据来自数据库中的角色特定视图。
答案 0 :(得分:5)
我没有实际使用角色来隐藏/显示某些控件,而是建议为每个角色设置另一层权限,而不是基于这些权限进行显示/隐藏。
通过这种方式,您可以重新定义角色拥有的权限,而不必更改代码。
此外,这允许您在将来创建新角色,并为角色分配一组权限。
至于控件,是的......我只是根据user.IsInRole(“permissionname”)值在控件上设置Visible属性。
对于网格我也会这样做...将列的可见性设置为IsInRole布尔值。
//Delete Icon Column
gridViewContacts.Columns[0].Visible = user.IsInRole("DeleteAnyContact");
我会以非常精细的方式创建您的权限..例如
答案 1 :(得分:1)
如果您要使用基于角色的路由,ASP.NET(自2.0版本以来)已经提供了各种可用的成员控制,这可能对此方案有所帮助。假设(并且这可能是错误的假设)您正在使用内置成员资格提供程序,您实际上可以使用LoginView
控件来处理#1。
它的工作方式是LoginView
可以使用RoleGroups
及其关联的ContentTemplates
根据角色自定义用户的视图。这与内置会员提供商无缝协作;我相信如果你基于微软的技术建立自己的会员提供商,它也会起作用。 (我没有完成后一步。)
可以想象,你可以将它用于#2,但它最终会带来重复的代码和努力,这不是我个人的偏好。我认为您选择使用特定于角色的SQL视图来驱动该表可能比此选项更好。 (当然,还有其他选择,可能会更好。)
我将推荐Elijah Manor建议使用权限而不是角色。一般来说,这也是我的偏好。 (我很惊讶地发现会员提供商的技术没有达到那个水平。)但是,在任何以权限为中心的情况下,你基本上都必须自己动手。 (我已经完成了这项工作,虽然它非常灵活,但是保护任何给定页面的代码都会变得毛茸茸。)
编辑:我道歉;我打算包含一个LoginView控件的链接。 DotNetJunkies上有tutorial。