代码之家  ›  专栏  ›  技术社区  ›  Matthew Dresser

如何将.NET成员身份角色分配给单个数据库记录

  •  3
  • Matthew Dresser  · 技术社区  · 15 年前

    我正在开发一个系统,我们希望根据用户的角色限制显示给他们的信息的可用性。

    我有一张叫 EventType (ID, EventTypeDescription) 其中包含以下记录:

    1, 'Basic Event'
    2, 'Intermediate Event'
    3, 'Admin Event'
    

    我需要实现的是根据登录用户的用户名(以及相应的角色)过滤返回的记录。例如,如果高级用户登录,他们将看到所有事件类型;如果标准用户登录,他们将只看到基本事件类型等。

    理想情况下,ID希望以一种可以根据需要轻松扩展到其他表的方式来执行此操作。因此,我希望避免简单地向每个表添加一个“roles”字段,其中的数据对用户上下文敏感。

    我想的一个想法是创建某种权限表,比如:

    PermissionsTable
    (
      ID,
      Aspnet_RoleId,
      TableName,
      PrimaryKeyValue
    )
    

    这有一个缺点,即使用它显然必须使用表名来切换要联接的表。

    编辑: 在没有任何更好的建议的情况下,我将采用我提到的最后一个想法,但我将把TableName字段正常化为它自己的表,如下所示:

    TableNames
    (
      ID,
      TableName
    )
    
    UserPermissionsTable
    (
      ID,
      Aspnet_UserId,
      TableID,
      PrimaryKeyValue
    )
    
    4 回复  |  直到 15 年前
        1
  •  1
  •   Ed Montalvo    15 年前

    我们做了类似的事情,我们的解决方案是使用表值函数进行联接。 IE.

    从事件E中选择*。 内部联接[dbo].fn_availableevents(@user_id)a on e.id=a.id

    函数只返回允许用户查看的事件的事件ID。

        2
  •  1
  •   War    15 年前

    我做了类似的事情,同时建立一个CMS…

    实际上,我在数据库中创建了几个表: 用户 角色 用户角色 物体 对象权限

    好的,它是这样工作的…

    前三个是相当自我解释,用户,角色和他们之间的联系。 根据用户对角色的成员资格授予用户权限。

    接下来我要做的就是定义我想要控制的“对象”和我想要分配给它们的权限级别…

    因此,对象包含一个对象定义列表,然后在其他表中扩展,这些表与对象ID相关,而对象权限表基本上将对象链接到一个角色。

    在这一点上,也许有必要解释一些关于角色的事情…

    我看到的角色是一个权限列表,不多不少。

    因此,如果我创建了一个名为guest的角色,并将该角色设置为允许读取权限,那么创建一个名为admin的角色,该角色具有全局权限,可以执行所有我能执行的操作,然后执行类似的操作…

    添加用户1管理角色。 将对象1添加到管理角色。

    用户1现在可以完全访问对象1,这里重要的是权限是继承的,所以任何子对象(包括文件和文件夹权限)也将处于同一角色集中,除非被递归重写。

    因此,默认情况下,我将根级别对象分配给每个关键系统角色。 然后我有选择地将用户添加到树中不同点的不同角色中。

    这有道理吗?

    本质上,我可以选择任何对象和任何用户,并通过将用户添加到与对象相同的角色,向用户授予对该对象及其子对象的不同程度的权限。

    现在有一些事情需要注意……

    如果我希望一个用户对一个嵌套很深的对象拥有管理权限,而不是在根级别,那么我必须创建一个新角色,授予所有权限,并将用户和对象都添加到该对象中。

    原因是,如果我将用户添加到主管理角色中,那么将从根级别向上授予用户这些权限,而不是从嵌套对象授予这些权限。

    除了这个,还有更多的内容,但本质上这就是文件系统权限的工作方式。

        3
  •  0
  •   David Gardiner    15 年前

    您没有提到正在使用的数据库(如果有),但是假设使用SQL Server,那么如果使用Windows身份验证进行连接,则可以创建基于 SYSTEM_USER 功能。

        4
  •  0
  •   David Perlman    15 年前

    即使你不使用它,这是一种耻辱,你至少可以从中学习到这个概念的内在和外在 Rhino.Security .

    推荐文章