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