我确信很多人已经完成了这项工作,并且正在寻找一些指导来设计一个可以为多个用户处理数据(行级别)安全性的强大,可扩展的应用程序。
我们正在研究一种系统,用户,有些作为个人,有些作为大型团体的一部分,需要访问自己的数据以及其他个人和组织与他们共享的数据。在某些情况下,数据仅供查看共享,在其他情况下,可以使用完整的编辑权限。 即使在同一个组织内,也需要限制用户可以看到组织中其他用户创建的数据。
所以一个非常粗略的例子可能是...... 具有角色X的用户A(个人用户) 具有角色Y的用户B(个人用户) 具有角色Z的用户C(个人用户) 组织AA中具有角色X的用户D和E. 组织AA中具有角色Y的用户F和G
每个用户都可以为我们的系统创建合同。在他们选择与其他个人用户分享合同之前,该合同不得被任何其他人查看,例如A将与用户B或F分享他的合同。 但是,用户A也可能希望与组织AA中的角色Y的所有用户共享他的合同。 同样,共享合同甚至可能意味着允许编辑合同。
我们最初希望为每个用户设置一个单独的架构,以确保数据级别的安全性,但这会使共享变得更加复杂,并且还可能导致1000个架构(这看起来似乎是一个好主意) )。 因此,我们唯一的办法就是将所有数据保留在一个数据库中的一个模式中,并简单地设计一个用户和角色驱动的应用程序级安全模型,该模型可以容纳每个合同所需的所有CRUD权限。听起来这会变得非常复杂并且不那么漂亮"。对于每个合同,我们必须按组织定义用户和角色列表,其中包含每个用户/角色的个人权限。 有人做过这样的事吗?关于良好和安全的应用程序设计的任何建议?
由于
答案 0 :(得分:0)
以下是对此要求的一些粗略想法
由于您所说的是数据安全控制而不是系统功能/功能访问控制,所以我将重点关注数据访问控制。
您可能还希望将原则定义为一种组合/层次结构,例如
BTW:由于此处的设计非常灵活,因此您需要系统级冲突检查机制来检查
任何分配的所有原则之间的冲突,以确保没有系统级别冲突(例如,roleA定义用户无法更新类型A的文档,而PERMISSION2定义它可以)另一种可能的方法是为不同类型的原理定义优先级,例如,定义的级别USER>角色> PERMISSION。
还有一个功能级别(SOX法律等)冲突检查,以确保没有功能级别冲突,例如,有能力做付款的人无法访问现金等操作)< / p>
然后可以定义诸如document / principle / restrict type / restrict operation / restrict start和thru date之类的模式来存储每个文档的数据访问控制,
如果您的组织具有层次结构,您还可以定义如何为父组织和子组织继承访问控制,可能是示例模式,
组织ID / Acccess固有类型/开始和截止日期。
您可以实现的目标可能是:
然后,您可以组合此组织级访问控制和文档级访问控制,在评估规则时,文档级访问控制的优先级始终高于组织级访问控制。