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

时间:2011-10-26 04:42:18

标签: c# asp.net entity-framework database-design role-base-authorization

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

它需要授权用户访问Web表单和CRUD操作表单和数据库表。

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

//More Info :

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

我熟悉ASP.NET 2.0 Membership,Roles,Forms Authentication。

我很感激任何有关设计数据库的建议或帮助。

1 个答案:

答案 0 :(得分:2)

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

此外:

  1. 用户始终是至少一个群组的一部分
  2. A Group可能属于另一个集团
  3. 实际ACL设置为组级别并为其定义 每个表格或表格。
  4. 所以:

        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)orm,Everyone可以读取它(但不能修改它的结构)。 SALES组中的用户也可以使用表单1进行更新。 管理员(组)可以修改,删除或使用Form Form002(但不能创建它...) 管理员可以创建新表单。 Tab-045A是一个表,其用户可以从Sales组创建/使用/修改/删除其记录。

    一些警告:

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

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

    How to store a tree in SQL database