代码之家  ›  专栏  ›  技术社区  ›  Sid Kshatriya

不允许用户删除节点,但允许通过批量操作删除视图

  •  4
  • Sid Kshatriya  · 技术社区  · 14 年前

    • 编辑角色应该 删除节点。因此相应的 权限被取消选中 权限页。
    • 应该能够删除节点 从视图批量操作。使用 创建动作的规则称为 “安全删除”检查 删除节点之前。

    我相信这是一个主流的要求,但我似乎找不到解决办法。

    不涉及编程的解决方案将是首选。

    4 回复  |  直到 11 年前
        1
  •  2
  •   berkes    14 年前

    简单,但不是很干净的方法,是你已经走的路线,但有一个额外的,小模块来帮助它。

    • 有一个功能 my_module_can_delete($user) ,返回 TRUE 如果允许用户删除, FALSE 如果用户不是。
    • 工具 hook_form_alter()
    • 钩子形状改变() 我的\模块\可以\删除($user)

    但是,您可以使其更加坚固,以捕获其他删除模块:

    • hook_nodeapi() , $op == 'delete' 捕捉删除操作并停止(通过调用 drupal_goto() drupal_access_denied() 强制执行用户错误。仅当referer是如上所述的delete confirm表单时捕获删除操作。或者,更安全的是,将您的VBO操作列为白名单,并在所有其他引用上返回false。通常可以通过读取传递给的$node来找到referer 钩子\u nodeapi() .

    可供替代的 ,只需确保在每个删除操作上都调用了批处理/操作。

    然后编写一个实现 钩子\u nodeapi() 然后从那里调用所有的清理操作。这样,您就可以确保对任何节点上的每个删除操作都调用了删除操作。显然,您可以在hook\u nodeapi()中添加一些条件,以便在某些情况下(节点类型、用户角色、权限等)仅调用模块。

        2
  •  1
  •   John Fiala    14 年前

    好吧,在我看来,你有一个设置,你不希望编辑角色用户删除东西,真的,除非在某些极端情况下。我的建议是:

    1) 安装标志模块。创建只能由编辑器角色人员分配的“待删除”标志。

    3) 然后设置一些cron运行活动(触发器/操作或规则)来删除设置了“要删除”标志的节点,或者让另一个具有更高权限的用户偶尔进来并删除标记的项目。

    这样,您实际上并没有绕过权限系统,但仍然会从您的站点中删除某些内容。

        3
  •  1
  •   WestieUK    13 年前

    我有一段时间没有注意到这一点,直到我注意到“actions\u permissions”模块,启用它,在permissions页上,您可以逐个角色提供对特定操作的访问。

        4
  •  0
  •   Andrew    14 年前

    我没有一个好的无编码解决方案,我不确定我是否会称这个解决方案为“伟大的”—但是一种方法可能是实现一个带有form\u alter hook的简单模块,在构建表单时从节点edit表单中删除delete按钮。

    一般来说,角色似乎有删除节点的权限或没有,像这样胡乱摆弄可能会不如您喜欢的那么健壮。

    推荐文章