假设我的系统中有多种类型的文档。我想根据三个方面限制对它们的访问:用户角色、所有权和用户与对象的相关性。因此,例如 ROLE_DOCUMENTTYPE1READ 将授予用户阅读文档的权限(其他角色如 ROLE_DOCUMENTTYP1WRITE 将授予 RW 权限)。存在与文档的连接(如果文档在其 1:M related_users 字段中有用户)赋予用户向文档添加评论的权利。如果用户是对象的所有者,他可以完全编辑它。
我可以很容易地在控制器中实现它,甚至创建一个 trait 或类似的东西,但它会太丑陋和乏味,因为会有很多实体和动作在它们上面,不仅是常规的 CRUD,还有其他改变某些的字段。我想知道通常应该如何做这些事情。也许有一些架构模式可以在这种情况下有所帮助?现在,正如我已经说过的,如果用户与实体相关,或者他甚至是其所有者或具有上述角色,我将检查每个操作。