Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否有基于所有权和其他用户文档关系的集中访问控制(对实体)的解决方案_Php_Symfony_Architecture - Fatal编程技术网

Php 是否有基于所有权和其他用户文档关系的集中访问控制(对实体)的解决方案

Php 是否有基于所有权和其他用户文档关系的集中访问控制(对实体)的解决方案,php,symfony,architecture,Php,Symfony,Architecture,假设我的系统中有多种类型的文档。我想从三个方面限制对它们的访问:用户角色、所有权和用户与对象的相关性。例如,ROLE_DOCUMENTTYPE1READ将授予用户读取文档的权限(ROLE_DocumentType1Write等其他角色将授予RW权限)。存在与文档的连接(如果文档的1:M related_users字段中有用户),则用户有权向文档添加注释。如果用户是对象的所有者,他可以完全编辑它 我可以很容易地在controller中实现它,甚至创建一个trait或类似的东西,但这太难看了,也太乏

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


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

您可以查看JMSSecurityExtraBundle和。它们允许执行复杂的访问决策检查,并且由于它们被编译为原始PHP,因此比内置投票者快得多。

您可以查看JMSSecurityExtraBundle和。它们允许执行复杂的访问决策检查,并且由于它们被编译为原始PHP,因此它们比内置投票者快得多。

实际上我已经在做这项工作:)而且它们的AOP包也很方便完成这项任务。现在,我决定在自定义安全表达式中实现我能实现的功能(因为我的控制器使用Id而不是对象),并使用现有的Id。但无论如何谢谢你:)事实上我已经在做:)他们的AOP包也很适合这个任务。现在,我决定在自定义安全表达式中实现我能实现的功能(因为我的控制器使用Id而不是对象),并使用现有的Id。不过还是要谢谢你:)