首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用投票者删除集合中的项吗?

我可以使用投票者删除集合中的项吗?
EN

Stack Overflow用户
提问于 2015-04-15 10:46:19
回答 1查看 186关注 0票数 0

我想利用选民来加强我的代码中的安全性。我只希望一些用户能够删除项目的集合。

这里我的例子是:

我有一篇与文章相关的文章和标签。我希望文章的作者能够删除与该条款相关的标记(只有文章的作者才能这样做)

我正在考虑使用选民(检查用户是否是这篇文章的作者),但我在互联网上找到的每一个例子都显示出选民是从树枝上或从控制器调用的.使用集合选项“允许-删除”时,symfony从实体项目调用方法removeTag($tag)。此外,我也不知道如何/在哪里给选民打电话。

EN

回答 1

Stack Overflow用户

发布于 2015-04-15 11:56:14

答案可以是这样:

是的,你可以,在你想要的地方注入service.container,然后调用$this->securityContext->isGranted('delete', $tag);

但这意味着您需要在实体中注入服务,这是完全错误的。

另一种方法是在preRemove或onFlush事件的原则听者内部这样做,这很酷,但几乎是错误的,如果选民失败了,你会怎么做?如果你抛出一个例外,这将打破教义。另外,如果没有用户,会发生什么情况?原因是,在侦听器中,您无法轻松地将反馈返回给用户。

在更高的抽象级别上阻止实体删除是错误的,因为您可以在一个更好、更易于管理的地方执行白化操作,从而在代码库的其他远程位置创建错误。

相反,试着这样做:

  • 如果您正在使用symfony表单,您可以执行以下两种操作之一:
    • 使用表单约束作为服务,在此注入安全上下文并进行验证,如果错误添加表单错误
    • 将自定义表单类型创建为以集合为父级的服务,注入security.context,最后在PRE_SET_DATA上使用表单侦听器检查是否删除了某些内容,并检查是否允许当前用户使用isGranted,如果检查失败,则添加表单错误。

  • 如果您在单个操作(例如api)中执行此操作,则只需在您的操作或小树枝中直接与isGranted检查即可。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29648187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档