我想使用选民来增强我的代码的安全性。我只希望某些用户能够删除项目集合。
这是我的例子:
我有一篇文章和与文章相关的标签。我希望文章的作者能够删除与该文章关联的标签(只有文章的作者可以这样做)
我正在考虑使用选民(检查用户是否是文章的作者),但我在互联网上找到的每个示例都显示从树枝或控制器调用的选民......而收集选项“允许-delete" symfony 从实体 Article 调用方法 removeTag($tag)。我也看不到我可以如何/在哪里打电话给选民。
我想使用选民来增强我的代码的安全性。我只希望某些用户能够删除项目集合。
这是我的例子:
我有一篇文章和与文章相关的标签。我希望文章的作者能够删除与该文章关联的标签(只有文章的作者可以这样做)
我正在考虑使用选民(检查用户是否是文章的作者),但我在互联网上找到的每个示例都显示从树枝或控制器调用的选民......而收集选项“允许-delete" symfony 从实体 Article 调用方法 removeTag($tag)。我也看不到我可以如何/在哪里打电话给选民。
答案可能是这样的:
是的,你可以,在你想要的地方注入 service.container 并调用$this->securityContext->isGranted('delete', $tag);
但这意味着您需要在实体中注入服务,这是完全错误的。
另一种方法是在 preRemove 或 onFlush 事件的原则侦听器中执行此操作,这很酷但几乎是错误的,如果选民失败了怎么办?如果您抛出异常,这将破坏教义。如果没有用户,还会发生什么?原因是在监听器中你不能轻易地向用户返回反馈。
在更高的抽象级别上阻止实体删除是错误的,因为您可以在更好、更易于管理的地方进行操作,而不会在代码库的其他远程位置产生错误的风险。
试试这个: