我需要自动将角色(角色 X)应用于已被授予单独角色(角色 Y)的所有 Drupal 用户。换句话说,我希望角色 X 成为角色 Y 的子集。我怎样才能做到这一点?

有帮助吗?

解决方案

你可以实施 hook_user() 在自定义模块中。在“插入”和/或“更新”操作中,您需要检查角色 Y $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])
;

其他提示

我与Henrik欧宝同意使用hook_user自定义模块将是一个很好的解决方案,以保持用户,并确保他们是最新的所有的时间。

通常我不会介意编写SQL或东西一样,但在这种情况下,因为它是在生产现场,我宁愿一个不同的路线,因为如果有什么可以写原始SQL时容易出问题,一个小错字可以造成大麻烦。换个好点的是,你可以运行到问题的Drupal不会知道什么原始的SQL您在数据库上运行,并可能会不同步的一些流程,钩等过程,当你通过Drupal的API做的事情,选项通常运行。

相反,你可以使用Drupal的用户管理界面。其实,我觉得在这种情况下,它是在简单办法做你想做的。简单地筛选是学生的所有用户。单击所有用户,并给他们的成员角色。这是在任何时候点击几下完成的,而且是非常安全的,因为Drupal将处理所有的SQL你。

<强>更新结果 随着许多用户,我很惊讶,你没有使用有一个自定义的用户和内容管理页面设置 views_bulk_operations 。用几分钟的时间,你可以设置,你可以用预制棒批量操作,如更改用户身份,角色,或节点执行类似任务的管理页面。您可以使用暴露的意见过滤器创建自己的过滤器。因此,与点击几下就可以与学生的角色选择所有用户,这是不是会员,其全部选中和部件轧辊添加到他们。其优点这样做不仅在于它的快速和安全的,但您可以创建为您的网站管理员,内容创作者等一些不错的管理页面,你应该考虑寻找到该模块。

在LDAP模块允许用户动态分配基于DN角色。其实我有写我自己的模块是专门为我们的系统,否则我会更乐意与他人分享。

链接文本

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top