Programlı olarak kullanıcı rolü atayın


12

Web sitemde birden fazla rolüm var ve siteme kaydolurken bazı kullanıcılara belirli bir rol atamak istiyorum.

Yeni kullanıcılara, kayıt formlarını gönderdiklerinde programlı olarak nasıl belirli bir rol atayabilirim?
Logintoboggan, autoassignrole gibi modülleri denedim, ancak siteme kaydolan tüm kullanıcılara değil, belirli kullanıcılara rol atamak istediğimde, kayıtta varsayılan bir kullanıcı rolü sağlıyorlar.

Yanıtlar:


10

Bunu "programlı" olarak göremeyebilirsiniz, ancak bunu yapmak için Kurallar modülünü kullanabilirsiniz.

Modülü kurun ve "Yeni bir kullanıcı hesabını kaydettikten sonra" etkinliğinde yeni bir kural oluşturun. Eylem için, kullanıcı rolünü ABC olarak ayarlamak isteyeceksiniz (burada ABC atamak istediğiniz rol (ler) dir).

Koşul ekleyerek rolü belirli kullanıcılarla sınırlandırabilirsiniz. Örneğin, yalnızca kullanıcı kayıt formunda belirli bir değer seçmişse kuralı uygulamak için "Veri karşılaştırma" koşulunu kullanabilirsiniz (ayrıntılı örnek: kuralı, yalnızca kayıt sırasında cinsiyet olarak "kadın" ı seçen kullanıcılarla sınırlayın ).

Ödül vermek istediğiniz her koşul / rol kombinasyonu için bir kural oluşturmanız gerekecektir. Bununla birlikte, Kurallar yaygın olarak kullanılan bir modüldür ve manuel olarak veya Özellikler modülüyle dışa aktarılarak size çok fazla esneklik sağlar.


13

Bu görevi ayrıca user_multiple_role_edit () işleviyle çözdük . Kullanıcı tabanımızda kayıt formuna değil, kullanıcıları anında oluşturmak için özel bir menü geri aramasına tepki verdik.

İlk olarak: Bir kullanıcı oluşturun

$user = new stdClass();
$user->name = $name;
$user->status = 1;
user_save($user);

İkincisi: Kullanıcıyı role atayın

$role = user_role_load_by_name("my custom role");
user_multiple_role_edit(array($user->uid), 'add_role', $role->rid);

5

Bu, varsayılan rolleri 4,5 ve 6 yapar:

function mymodule_form_user_register_form_alter(&$form, &$form_state, $form_id){
    $form['account']['roles']['#default_value'][] = '4';
    $form['account']['roles']['#default_value'][] = '5';
    $form['account']['roles']['#default_value'][] = '6';
}

2

Benim durumumda sadece dört profil2 profili vardı, ancak kişi kayıt formunda belirli bir değere sahip olsaydı, onları yeni bir role eklemek zorunda kaldım. İşte yaptığım şey:

<?php 
function MYMODULE_user_insert(&$edit, $account, $category){
  if (array_key_exists('profile_club', $account)) {
    $is_uni = FALSE;
    if ($account->profile_club['field_uni_club']['und'][0]['value'] == 1 ) {
      $is_uni = TRUE;
    }
    if ($is_uni) {
      $uid = $account->uid;
      $role_name = 'uni_club';
      if ($role = user_role_load_by_name($role_name)) {
        user_multiple_role_edit(array($uid), 'add_role', $role->rid);
      }
    }
  }
}
?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.