代码之家  ›  专栏  ›  技术社区  ›  Reynolds

向所有具有特定角色的用户授予Drupal角色

  •  1
  • Reynolds  · 技术社区  · 16 年前

    我需要自动将角色x应用于所有被授予单独角色y的Drupal用户。换句话说,我希望角色x是角色y的一个子集。我如何才能这样做?

    3 回复  |  直到 16 年前
        1
  •  4
  •   Henrik Opel    16 年前

    你可以实现 hook_user() 在自定义模块中。在“插入”和/或“更新”操作中,您将检查 $account->roles 数组。如果存在,则添加角色x(如果不存在)。这将确保每次创建和/或更改用户帐户时应用规则。

    对于引导/一次性操作,请查看 user_multiple_role_edit() . 它允许您为一组用户ID添加或删除角色。或者,您可以直接在数据库中执行此操作:

    INSERT INTO users_roles (uid, rid)
      SELECT uid, [roleX_ID] AS rid FROM users_roles
        WHERE uid IN
          (SELECT uid FROM users_roles WHERE rid = [roleY_ID])
        AND uid NOT IN
          (SELECT uid FROM users_roles WHERE rid = [roleX_ID])
    ;
    
        2
  •  1
  •   googletorp    16 年前

    我同意Henrik Opel在自定义模块中使用hook_用户是维护用户并确保他们始终保持最新的一个很好的解决方案。

    通常我不介意写SQL或类似的东西,但在这种情况下,由于它在生产站点上,我更喜欢另一种方式,因为如果在写原始SQL时很容易出错,那么一点拼写错误可能会导致大麻烦。另一个好处是,您可能会遇到问题,因为Drupal不知道您在数据库上运行的原始SQL,可能会与通过Drupal API执行操作时通常运行的某些进程、挂钩和其他进程不同步。

    相反,您可以使用Drupal用户管理界面。我真的认为在这种情况下, 最容易的 做你想做的事。只需过滤所有学生用户。单击所有用户并赋予他们成员角色。这是通过点击几下就可以完成的,而且非常安全,因为Drupal将为您处理所有的SQL。

    更新的
    有这么多用户,我很惊讶你没有一个自定义的用户和内容管理页面设置使用 views_bulk_operations . 几分钟后,您可以设置一个管理页面,用于执行批量操作,如更改用户状态、角色或执行节点的类似任务。您可以使用暴露视图过滤器创建自己的过滤器。因此,只需点击几下,您就可以选择所有具有student角色且不是成员的用户,然后选择所有用户并将成员名单添加到这些用户中。这样做的好处不仅在于它快速、安全,而且还可以为站点管理员、内容创建者等创建一些不错的管理页面。您应该考虑查看此模块。

        3
  •  -2
  •   lilott8 huseyin    16 年前

    LDAP模块允许您根据DN动态分配角色。实际上,我必须编写自己的模块,专门为我们的系统定制,否则我将非常乐意与大家分享。

    link text