基于多级角色授权的数据库设计

本文关键字:授权 数据库 角色 于多级 多级 | 更新日期: 2023-09-27 18:12:30

我正在设计一个应用程序在ASP。. NET web -需要基于Multilevel角色的授权和权限(CRUD操作)。

它要求授权用户访问Web-Forms和对表单和数据库表进行CRUD操作。

应用程序的管理员将能够确定哪些角色可以访问特定页面以及授权执行哪些操作。

//More Info :

我正在使用ASP。. NET Web-Form 4.0和实体框架4.1数据库优先方法。

我熟悉ASP。. NET 2.0成员、角色、表单验证。

如有任何建议或帮助我设计数据库,我将不胜感激。

基于多级角色授权的数据库设计

如果我理解正确,那么您将拥有一组用户(可能在子集中细分:每个子集是一个组)。

:

  1. 用户总是至少属于一个组
  2. 一个组可能是另一个组的一部分
  3. 实际acl设置在组级别,定义为

:

    Item     Type  GroupId     C R U D
   Form001    F    ALL_USERS   N Y N N
   Form001    F    Sales       N R U N
   Form002    F    Admin       N Y Y Y
   All_FORMS  T:F  Admin       Y Y Y Y
   Tab-045A   D    Sales       Y Y Y Y

说:Form001是一个(F)表单,每个人都可以读取它(但不能修改它的结构)。SALES组的用户也可以使用表单1进行更新。管理员(组)可以修改、删除或使用表单Form002(但不能创建它…)管理员可以创建新的表单。表045a是一个表,其中的记录可以由Sales组的用户创建/使用/修改/删除。

注意事项:

  • 请帮大家一个忙,不要允许在单个用户级别设置特权,而总是只在组级别设置。新用户将自动成为ALL_USERS的一部分,以后可能会添加到其他组(或从其他组中删除)。最好不仅有表格和表单,而且还有"表单组"(假设最终用户可以创建表单)。如果不是这种情况,那么CRUD标志集中的"C"字段对于表单就变得无用了。表单是用户组可以设计的东西吗?或者它们是应用程序的一部分,就像我想的那样?)
  • 一般来说,你必须为Create/Read/Update/Delete定义合适的语义。对于表,我认为这意味着创建一个单一的记录(不是表),但对于表单,这是有点混乱的时刻。
  • 上面的表格只是一个例子,并没有正确规范化。根据具体情况,您可能必须将其拆分为至少两个表,可能更多。
  • 为了找出用户X是否可以对对象Z执行操作Y,您基本上必须查找Item/Group表上的权限集,并查看用户X属于哪些组。
  • 当一个用户属于两个不同的组时,你必须正确地管理这种情况,并且总是选择具有最多权限的一个,或者所有权限的联合。
  • 您必须管理这样的情况:用户是组的一部分,该组是另一个组的子组,并且特权已经在更高级别的组中定义。

必须管理组和子组,您最好查看目标DB中存在哪些类型的工具来管理树结构。你们最好通过看一些关于这个的问题来温习这个主题。这里有一个给你一个开始,但它不是唯一的:

如何在SQL数据库中存储树