【问题标题】:What's the best way to implement different views for a website based on role?根据角色为网站实施不同视图的最佳方法是什么?
【发布时间】:2010-09-17 15:02:40
【问题描述】:

在 ASP.NET 中执行以下操作的最佳方法是:

  1. 根据您的权利显示某些控件?
  2. 对于 gridview 控件,如何根据您的角色显示某些列?

我在考虑第 2 点,让数据来自数据库上的角色特定视图。

【问题讨论】:

    标签: asp.net security roles


    【解决方案1】:

    我建议不要实际使用角色来隐藏/显示某些控件,而是建议为每个角色设置另一层权限,然后根据这些权限显示/隐藏。

    这样您就可以重新定义角色拥有的权限,而不必更改您的代码。

    此外,这允许您在未来创建新角色,只需为该角色分配一组权限。

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

    对于网格我也会这样做...将列的可见性设置为 IsInRole 布尔值。

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

    我会以非常精细的性质创建您的权限..例如

    • 查看AnyContact
    • ViewOwnContact
    • EditOwnContact
    • EditAnyContact
    • 添加任何联系人
    • 删除OwnContact
    • 删除AnyContact
    • 等等……

    【讨论】:

      【解决方案2】:

      如果您采用基于角色的路线,ASP.NET(自 2.0 版起)提供了多种成员资格控件,这些控件可能对这种情况有所帮助。假设(这很可能是一个错误的假设)您正在使用收件箱成员资格提供程序,您实际上可以使用LoginView 控件来处理#1。

      它的工作方式是LoginView 可以使用RoleGroups 及其关联的ContentTemplates 根据角色为用户自定义视图。这与收件箱会员提供程序无缝协作;我相信,如果您基于 Microsoft 的技术构建自己的会员服务提供商,它也会起作用。 (我还没有完成后一步。)

      可以想象,您可以将它用于#2,但最终会产生重复的代码和工作量,这不是我个人的偏好。我认为您选择使用特定于角色的 SQL 视图来驱动该表可能比这个选项更好。 (当然还有其他选择,可能会更好。)

      我会赞同 Elijah Manor 关于使用权限而不是角色的建议。一般来说,这也是我的偏好。 (我惊讶地发现会员提供者的技术并没有达到那个水平。)但是,在任何以许可为中心的场景中,您基本上必须自己滚动所有内容。 (我已经这样做了,虽然它非常灵活,但保护任何给定页面的代码可能会变得很麻烦。)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-30
        • 2011-08-22
        • 1970-01-01
        • 2015-11-05
        • 2017-05-17
        • 2021-06-16
        • 1970-01-01
        • 2022-10-08
        相关资源
        最近更新 更多