是否有一种解决方案可以根据所有权和其他用户-文档关系集中访问控制(对实体)


Is there a solution to centralize access control (to entities) based on ownership and other user-document relations

假设我的系统中有许多类型的文档。我想根据三个方面限制对它们的访问:用户角色、所有权和用户与对象的相关性。因此,例如ROLE_DOCUMENTTYPE1READ将授予用户读取文档的权限(其他角色(如ROLE_DOCUMENTTYP1WRITE)将授予RW权限)。存在与文档的连接(如果文档在其 1:M related_users字段中有用户)授予用户向文档添加注释的权限。如果用户是对象的所有者,他可以完全编辑它。

我可以轻松地在控制器中实现它,甚至可以创建一个特征或类似的东西,但它太丑陋和乏味了,因为会有很多实体和操作,不仅是常规的 CRUD,还有改变某些字段的其他实体和操作。我想知道通常应该如何做这些事情。也许有一些架构模式在这种情况下有所帮助?现在,正如我已经说过的,如果用户与实体相关,或者他甚至是其所有者或具有所述角色,我将检查每个操作。

您可以查看 JMSSecurityExtraBundle 和基于表达式的授权语言。它们允许执行复杂的访问决策检查,并且因为它们被编译为原始PHP,所以它们比内置的选民快得多。