Bir kullanıcının bir rolü olup olmadığını kontrol edin


46

Bir kullanıcının belirli bir rolü olup olmadığını nasıl kontrol edebilirim?

Bulduğum bu ama Drupal 6 içindir.

Yanıtlar:


87

Zaten bulduğumdan beri bu görevde , emin de yorumları okumak olun. Bir rol için denetlemenin neden izin denetlemesinin önerildiği açıkça açıklanmaktadır. İzinleri kullandığınızda, bu izni sisteminizi daha esnek hale getiren birden çok role atayabilirsiniz. Ayrıca, rollerin yeniden adlandırılabileceğini ve kodunuzu bozacağını unutmayın.

Bununla birlikte, bir rolü kontrol etmek istiyorsanız, şunları yapabilirsiniz:

// Load the currently logged in user.
global $user;

// Check if the user has the 'editor' role.
if (in_array('editor', $user->roles)) {
  // do fancy stuff
}

1
1'den fazla rolü kontrol etmek istersem ne olur? Örn: "editör" veya "yayıncı" ise, süslü şeyler yapmaktan ziyade. Kodlama Pls tavsiye eder. Gerçekten çözemiyorum.
Adamtan

8
Lütfen cevabı okuyunuz: Bir rolü (veya birden fazla) kontrol etmeniz önerilmez. Bunun yerine izinleri kontrol edin. Sorunuzun geri kalanı (iki koşulu bir if ifadesinde birleştirerek) temel PHP'dir, Drupal ile ilgili hiçbir şey yoktur. Mantıksal operatörler hakkındaki PHP belgelerini okuyun .
marcvangend

11

Mevcut kullanıcının tek bir rolü veya birden fazla rolün olup olmadığını kontrol etmek için harika bir yol:

//can be used in access callback too
function user_has_role($roles) {
    //checks if user has role/roles
    return !!count(array_intersect(is_array($roles)? $roles : array($roles), array_values($GLOBALS['user']->roles)));
};

if (user_has_role(array('moderator', 'administrator'))) {
  // $user is admin or moderator
} else if(user_has_role('tester')){
  // $user is tester
} else{
  // $user is not admin and not moderator
}

9

Drupal versiyonu için güncelleme> = 7.36

User_has_role işlevini Drupal API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7 adresinden kullanabilirsiniz .

Bu örneği deneyin:

<?php
function MYMODULE_foo() {
  $role = user_role_load_by_name('Author');
  if (user_has_role($role->rid)) {
    // Code if user has 'Author' role...
  }
  else {
    // Code if user doesn't have 'Author' role...
  }

  $user = user_load(123);

  if(user_has_role($role->rid, $user)) {
    // Code if user has 'Author' role...
  }
  else {
    // Code if user doesn't have 'Author' role...
  }
}
?>

2

Devel modülünü kurabilir ve dpm ($ user) yapabilirsiniz. Bu, kullanıcı rolü de dahil olmak üzere tüm kullanıcı bilgilerinin yer aldığı bir diziyi basacaktır.

Bu diziden "rollerin" dizi konumunu bulabilir ve kullanıcı rolünü bulmak için modülünüzde kullanabilirsiniz.


Geliştirme-> PHP kodunu yürütün altında, şunu girin: global $ user; dpm ($ kullanıcı);
diamondsea

1

Rol adının değişmesi durumunda geleceğe dönük olmak, veritabanındaki rol tablosunda bulunabilecek rol kimliğini (kurtulmak) kontrol etmek en iyisidir.

16'yı kurtaran bir rol olup olmadığını kontrol etmek istiyorsanız, şunları yapın:

// Load the currently logged in user.
global $user;

// Check if the user has the 'editor' role, when 'editor' has role id 16
if (array_key_exists(16, $user->roles)) {
  // do fancy stuff
}

1
Aslında, roller gibi şeyleri geçirdiğinizde, makine adı muhtemelen korunacak ve kimlik gösterilmeyecek
Mołot

Rol tablosunda sadece bir makine adı ve bir insan adı yoktur. Users_roles tablosu bir kurtulmaya bir kullanıcı adı atar.
Hans Rossel

1

İşte gerçek kod açıklama en iyi uygulama olarak kabul edilen cevap anılır

<?php
  function mymodule_perm() {
    return array('access something special');
  }

  function dosomethingspecial() {
    // For current user
    if (user_access('access something special')) {
      // Doing something special!
    }

    // For a specific user
    if (user_access('access something special', $theuser)) {
      // Doing something special!
    }
  }
?>

0

Bir kullanıcının rolünü print_r ($ user) ile kontrol edebilirsiniz ve sonuçta böyle bir şey elde edersiniz.

stdClass Nesnesi
(
    [uid] => 0
    [ana bilgisayar adı] => :: 1
    [roller] => Dizi
        (
            [1] => anonim kullanıcı // Şu anki kullanıcı rolü mayın sizin durumunuzda anonim
        )

0

Bir kullanıcının belirli bir rolü olup olmadığını kontrol etmek için:

function test_role(){
   global $user;
   if(isset($user->roles['my_role'])){
     return true;
   }
   else {
    return false;
 }
}

0
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}

0

Cevaplar işe yaramadı şeyden emin yolu, Bunu buldum yazıyı `ve kodu olmalıdır

// $ kullanıcının yönetici rolü olup olmadığını kontrol edin. if (in_array ('admin', array_values ​​($ user-> roller))) {// Bir şeyler yapın. }?> `

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.