假设我的系统中有多种类型的文档。我想基于三个方面限制对它们的访问:用户角色,所有权和用户与对象的相关性。因此,例如,ROLE_DOCUMENTTYPE1READ将授予用户读取文档的权限(其他角色,如ROLE_DOCUMENTTYP1WRITE将授予RW权限)。存在与文档的连接(如果文档在其1:M related_users字段中具有用户),则用户有权向文档添加注释。如果用户是对象的所有者,他可以完全编辑它。
我可以很容易地在控制器中实现它,甚至可以创建一个特性或类似的东西,但它太丑陋而且单调乏味,因为它们会有很多实体和动作,不仅是普通的CRUD,还有额外的一个改变某些领域。我想知道应该怎样做这些事情。也许有一些架构模式可以帮助解决这种情况?现在,正如我已经说过的那样,如果用户与实体有关,或者他甚至是其所有者或者有所说的角色,我将检查每一个动作。
答案 0 :(得分:1)
您可以查看JMSSecurityExtraBundle和Expression-based Authorization Language。 它们允许执行复杂的访问决策检查,并且由于它们被编译为原始PHP,因此它们比内置选民快得多。