通过规则加入有机组后向用户添加角色


8

我正在尝试向已成为组成员的用户添加用户角色。工作流程是这样的:

  • 用户请求加入群组。
  • 请求已由群组管理员批准。
  • 用户是该组的成员。
  • 用户获得其他角色。

我试图制定一条规则来执行此操作,但是尽管所有设置在加入该组后看起来都是正确的,但用户并没有获得其他角色。请参见下面的规则设置屏幕截图:

我的规则的屏幕截图


我有完全相同的问题,因此开始对此悬赏。
绿色黑色

@John您解决了问题吗?
kalabro 2012年

Answers:


2

现在,您的规则在用户请求成员资格后运行。但是您应该在OG成员资格获得批准后运行它。
我准备了规则,该规则在成员资格被批准或由管理员(自动批准)添加后添加了角色“成员”。这里是出口(4是我的Drupal角色“成员” ID):

{ "rules_after_add_user_to_group" : {
    "LABEL" : "After add user to group",
    "PLUGIN" : "reaction rule",
    "TAGS" : [ "test" ],
    "REQUIRES" : [ "rules", "og" ],
    "ON" : [ "og_user_insert", "og_user_approved" ],
    "IF" : [ { "data_is" : { "data" : [ "og-membership:state" ], "value" : "1" } } ],
    "DO" : [
      { "user_add_role" : { "account" : [ "account" ], "roles" : { "value" : { "4" : "4" } } } }
    ]
  }
}

屏幕截图: 在此处输入图片说明

提示:您可以启用“规则调试”(第页admin/config/workflow/rules/settings)来查看何时执行规则。


嗨,卡拉布罗。谢谢您的遮阳篷!我以这种方式进行设置,但是用户没有获得该角色。我能够通过向自定义模块添加功能并使用自定义php代码添加角色来解决此问题。病在这里张贴肮脏的解决方案。
绿色黑色

PS。我在这里问了我的问题,比这个问题更详细:drupal.org/node/1866278如果调试$ account,您会看到角色已添加,但根本没有保存,或被某些内容覆盖。
绿色黑色

@John我在Drupal.org上评论了您的问题。请看一下:#1
kalabro 2012年

2

我有同样的问题(为什么我开始赏金)。

我这样解决了。

我向自定义模块添加了一个功能。您可以通过在/ sites / all / modules中创建一个包含两个文件的新文件夹来简单地创建自己的模块:

yourname_module.info->>

name = "Custom Functions"
description = "Allows execution of custom code for the website"
core = 7.x
package = "yourname_customs"
version = 7.x-1.x

yourname.module

<?php 
function yourname_add_role_to_user($uid, $role_name) {

    $user = user_load($uid);

    if ($user === false || !isset($user->uid) || !is_array($user->roles)) {
        //Display an ugly error when user is not set correctly
        exit('$user is not set correctly <pre>' . print_r($user, true) . "</pre>");
    }

    //Get the user roles
    $roles = user_roles(TRUE);
    $rid = array_search($role_name, $roles);

    if ($rid != FALSE) {
        $new_role[$rid] = $role_name;

        // Add new role to existing roles.
        $all_roles = $user->roles + $new_role;

        //Delete all user roles from DB
        db_delete('users_roles')
                ->condition('uid', $user->uid)
                ->execute();

        //Insert all user roles in DB
        $query = db_insert('users_roles')->fields(array('uid', 'rid'));
        foreach (array_keys($all_roles) as $rid) {
            if (!in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) {
                $query->values(array(
                    'uid' => $user->uid,
                    'rid' => $rid,
                ));
            }
        }
        $query->execute();
    } else {

        //Display an ugly error wen role not found
        exit("Could not find role " . htmlspecialchars($role_name) . "<br/>
              Vald roles: <pre>" . print_r($roles, true) . "</pre>");
    }
}

然后转到您的模块并启用“自定义功能”。

确保您已启用模块自定义php代码。

然后,代替操作将用户添加到规则中的角色,添加:运行自定义php代码并输入:

yourname_add_role_to_user($account->uid, "Members");
header("Location: /admin/people");
exit;

这会将用户添加到该角色,并停止脚本。如果不停止脚本,则不会保存角色。而且我需要添加一个模块,因为user_save在中执行时不起作用custom php code

所以,我知道这很丑陋,但是对我有用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.