it-swarm-eu.dev

Zkontrolujte, zda uživatel nemá roli

Jak mohu zkontrolovat, zda má uživatel určitou roli?

Našel jsem toto , ale platí pro Drupal 6).

46
giorgio79

Protože jste již našli ten příspěvek , přečtěte si také komentáře. Jasně to vysvětluje, proč se doporučuje kontrola oprávnění před kontrolou role. Pokud použijete oprávnění, můžete toto oprávnění přiřadit více rolím, což zvyšuje flexibilitu systému. Nezapomeňte také, že role lze přejmenovat, což by narušilo váš kód.

To znamená, že pokud chcete zkontrolovat roli, můžete to udělat:

// 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
}
87
marcvangend

Chcete-li zkontrolovat, zda aktuální uživatel má jednu roli nebo více rolí, je skvělý postup:

//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
}
11

Aktualizace pro Drupal verze> = 7,36

Můžete použít funkci user_has_role z Drupal API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7 =.

Zkuste tento příklad:

<?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...
  }
}
?>
9
Marcin

Mohli byste nainstalovat devel modul a udělat dpm ($ user). Tím se vytiskne pole se všemi informacemi o uživateli, včetně role uživatele.

Z tohoto pole můžete najít polohu pole „rolí“ a použít jej ve svém modulu k nalezení uživatelské role.

2

V případě, že se název role změní, je nejlepší zajistit, aby bylo zkontrolováno ID role (zbaveno), které lze nalézt v tabulce rolí v databázi.

Pokud chcete zkontrolovat roli s rid 16, proveďte následující kroky:

// 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
Hans Rossel

Zde je skutečný kód z komentář , který je v přijaté odpovědi označen jako nejlepší postup

<?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!
    }
  }
?>
1
Eric Johnson

Rolu uživatele můžete zkontrolovat pomocí print_r ($ user) a na výstupu získáte něco podobného

 stdClass Object 
 (
 [uid] => 0 
 [název hostitele] => :: 1 
 [role] => Array 
 (
 [1] => anonymní uživatel // Důl aktuální uživatelské role je ve vašem případě anonymní, může se lišit 
) 
0
akash bhawra
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}
0
adal

zkontrolovat, zda má uživatel určitou roli:

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

Výše uvedené odpovědi nefungovaly, nejistý způsob, zjistil jsem to post a kód by měl být `

// Zkontrolujte, zda $ user má roli administrátora. if (in_array ('administrator', array_values ​​($ user-> roles))) {// Udělej něco. }?> `

0
pinueve