我想利用选民来加强我的代码中的安全性。我只希望一些用户能够删除项目的集合。
这里我的例子是:
我有一篇与文章相关的文章和标签。我希望文章的作者能够删除与该条款相关的标记(只有文章的作者才能这样做)
我正在考虑使用选民(检查用户是否是这篇文章的作者),但我在互联网上找到的每一个例子都显示出选民是从树枝上或从控制器调用的.使用集合选项“允许-删除”时,symfony从实体项目调用方法removeTag($tag)。此外,我也不知道如何/在哪里给选民打电话。
发布于 2015-04-15 11:56:14
答案可以是这样:
是的,你可以,在你想要的地方注入service.container,然后调用$this->securityContext->isGranted('delete', $tag);
但这意味着您需要在实体中注入服务,这是完全错误的。
另一种方法是在preRemove或onFlush事件的原则听者内部这样做,这很酷,但几乎是错误的,如果选民失败了,你会怎么做?如果你抛出一个例外,这将打破教义。另外,如果没有用户,会发生什么情况?原因是,在侦听器中,您无法轻松地将反馈返回给用户。
在更高的抽象级别上阻止实体删除是错误的,因为您可以在一个更好、更易于管理的地方执行白化操作,从而在代码库的其他远程位置创建错误。
相反,试着这样做:
https://stackoverflow.com/questions/29648187
复制相似问题