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

Posted

技术标签:

【中文标题】多级基于角色授权的数据库设计【英文标题】:Database design for Multi level Rolebased authorization 【发布时间】:2011-10-26 04:42:18 【问题描述】:

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

在访问Web-Forms和对数据库的表格和表格进行CRUD操作时需要授权用户。

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

//More Info :

我正在使用 ASP.NET Web-Form 4.0 和 Entity Framework 4.1 Database First 方法。

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

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

【问题讨论】:

到目前为止你有什么? 角色列表是静态的吗?还是动态的? “角色”是给特定用户的标签,还是您可以创建用户组(和组组)并将角色与组关联(然后组中的所有用户都会得到它)? @bryanmac : 我什么都没做,我只是想用自定义角色提供者来实现它 @P.Marino:角色是动态的。是的,管理员将能够创建组并将角色与组相关联......正如你所说的 【参考方案1】:

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

还有:

    用户始终是至少一个组的一部分 一个组可能是另一个组的一部分 实际 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 组的用户也可以使用 Form 1 进行更新。 管理员(一个组)可以修改、删除或使用Form Form002(但不能创建...) 管理员可以创建新表单。 Tab-045A 是一张表,销售组的用户可以创建/使用/修改/删除其记录。

一些注意事项:

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

必须管理组和子组,您最好查看目标数据库中存在哪些类型的设施来管理树结构。你最好通过查看一些关于此的问题来复习这个主题。这是一个让你开始的例子,但它不是唯一的:

How to store a tree in SQL database

【讨论】:

谢谢你,我明白你的意思,我没有接受你的帖子作为答案,因为我希望其他人也有想法。 没关系,如果我在这里提出问题,我自己会等一两天,然后再接受答案。

以上是关于多级基于角色授权的数据库设计的主要内容,如果未能解决你的问题,请参考以下文章

做网站-RBAC权限数据库设计

用户权限管理数据库设计(RBAC)

权限管理模块设计

权限管理模块设计

[数据库设计]用户和角色:通用权限管理系统数据库表结构如何设计?

用户和角色:通用权限管理系统数据库表结构如何设计?