1

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

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

4

1 回答 1

1

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

于 2013-09-09T18:16:57.157 回答