Проверьте, имеет ли пользователь роль

Как проверить, имеет ли пользователь определенную роль?

Я нашел это , но это для Drupal 6.

43 голоса | спросил giorgio79 13 72011vEurope/Moscow11bEurope/MoscowSun, 13 Nov 2011 22:52:25 +0400 2011, 22:52:25

10 ответов


86

Поскольку вы уже нашли этот пост , убедитесь, что вы также читаете комментарии. В нем четко объясняется, почему для проверки роли рекомендуется проверять разрешение. При использовании разрешений вы можете назначить это разрешение нескольким ролям, что сделает вашу систему более гибкой. Кроме того, помните, что роли можно переименовать, что нарушит ваш код.

Тем не менее, если вы хотите проверить роль, вы можете сделать это:

// 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
}
ответил marcvangend 13 72011vEurope/Moscow11bEurope/MoscowSun, 13 Nov 2011 23:50:09 +0400 2011, 23:50:09
11

Чтобы проверить, имеет ли текущий пользователь одну роль или любую из нескольких ролей, отличный способ:

//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
}
ответил Sadanand Kenganal 21 AM00000090000004031 2013, 09:37:40
9

Обновление для версии Drupal> = 7.36

Вы можете использовать функцию user_has_role из API Drupal https: //api .drupal.org /API /друпал /модули% 21user% 21user.module /функция /user_has_role /7 .

Попробуйте этот пример:

<?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...
  }
}
?>
ответил Marcin 31 MaramTue, 31 Mar 2015 11:47:05 +03002015-03-31T11:47:05+03:0011 2015, 11:47:05
2

Вы можете установить модуль devel и сделать dpm ($ user). Это будет печатать массив со всей информацией пользователя, включая роль пользователя.

Из этого массива вы можете найти положение массива «ролей» и использовать его в своем модуле, чтобы найти роль пользователя.

ответил Subramanian Hariharan 25 AMpThu, 25 Apr 2013 07:34:40 +040034Thursday 2013, 07:34:40
1

Чтобы быть надежным в будущем при изменении имени роли, лучше проверить идентификатор роли (rid), который можно найти в таблице ролей в базе данных.

Если вы хотите проверить роль со сбросом 16, выполните:

// 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
}
ответил Hans Rossel 1 MonEurope/Moscow2014-12-01T21:55:29+03:00Europe/Moscow12bEurope/MoscowMon, 01 Dec 2014 21:55:29 +0300 2014, 21:55:29
1

Вот фактический код из комментария , который упоминается в принятом ответе как наилучшая практика

<?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!
    }
  }
?>
ответил Eric Johnson 6 MarpmFri, 06 Mar 2015 20:36:46 +03002015-03-06T20:36:46+03:0008 2015, 20:36:46
0

Вы можете проверить роль пользователя по адресу print_r ($ user), и в результате вы получите что-то вроде этого

Объект stdClass
(
    [uid] => 0
    [hostname] => :: 1
    [role] => массив
        (
            [1] => анонимный пользователь //Текущая роль роли моя анонимна в вашем случае, она может быть разной
        )
ответил akash bhawra 14 12011vEurope/Moscow11bEurope/MoscowMon, 14 Nov 2011 09:07:53 +0400 2011, 09:07:53
0

, чтобы проверить, имеет ли пользователь определенную роль:

function test_role(){
   global $user;
   if(isset($user->roles['my_role'])){
     return true;
   }
   else {
    return false;
 }
}
ответил houmem 1 AMpWed, 01 Apr 2015 10:12:51 +030012Wednesday 2015, 10:12:51
0
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}
ответил cmsbots.com 21 J000000Tuesday15 2015, 17:02:30
0

Выше ответы не сработали, не уверен, я нашел это post , а код должен быть `

//Проверяем, есть ли у пользователя $ user роль администратора.   if (in_array ('administrator', array_values ​​($ user-> role))) {     //Сделай что-нибудь.   } ? > `

ответил pinueve 22 PM000000110000004731 2016, 23:24:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132