Drupal Group 模块,以编程方式将用户添加到具有特定角色的组

Posted

技术标签:

【中文标题】Drupal Group 模块,以编程方式将用户添加到具有特定角色的组【英文标题】:Drupal Group module, add a user to a group with a particular role programmatically 【发布时间】:2020-05-20 12:29:32 【问题描述】:

这个问题与Drupal 8 Group module,https://www.drupal.org/project/group

有关

我被困住了,需要有关如何以编程方式将用户添加到具有特定角色的组的帮助。我正在尝试通过提要导入将用户分配给组和角色,但无法弄清楚如何。 详细地说,假设我们有两组 DEV 和 QA。 DEV 属于 A 组类型,QA 属于 B 类型组。A 和 B 类型的两个组都有角色 X、Y 和 Z(组角色)。现在,我有一个用户 $account,我希望将其添加到具有角色 Y 的组 QA 中。有人可以帮助并说明我可以通过编程方式实现这一目标的方法吗?代码示例/sn-ps 会更有帮助。

【问题讨论】:

【参考方案1】:

这里有一些旧代码可能会有所帮助。不得不从 git 中挖掘出来,几年前因为项目不再需要而删除了它。可能会被弃用!

您正在加载组并使用 $group->addMember() 函数。我刚刚添加了成员​​,但您可以添加第二个参数,它是一个关联数组,可以指示要添加的角色。

$new_user = \Drupal\user\Entity\User::load($some_user_id);

// Get the group entity.
$gid = $form_state->getValue('gid');
$group = \Drupal::entityTypeManager()
  ->getStorage('group')
  ->load($gid);

// Add user as a member of the group.
$group->addMember($new_user);

// Set the owner of the group to be the user.
$group->set('uid', $new_user_id);

// Save changes to group. Anything below here should only be changes to
// Group Content.
$group->save();
$tags = $group->getCacheTagsToInvalidate();
Cache::invalidateTags($tags);

【讨论】:

感谢您的回复。然而,分配一个角色是我面临挑战的地方。现在,我有这样的东西, $values = ['group_roles' => 'Y']; $group->addMember($account, $values);但是,用户被添加到组中,但角色没有。刚刚被添加为匿名用户。 查看了数据库并弄清楚了, $values = ['group_roles' => $groupType 。 '-' 。 $角色名称]; $group->addMember($account, $values);这就像一个魅力!

以上是关于Drupal Group 模块,以编程方式将用户添加到具有特定角色的组的主要内容,如果未能解决你的问题,请参考以下文章

drupal 以编程方式禁用或删除节点创建节点链接

如何以编程方式更改 Drupal 用户密码?

drupal 7以编程方式登录用户

在模块内以编程方式在 Drupal 9 上创建示例内容的最佳技术

drupal 7以编程方式登录用户

php Drupal 8以编程方式创建用户