사용자에게 역할이 있는지 확인


46

사용자에게 특정 역할이 있는지 어떻게 확인할 수 있습니까?

내가 발견 있지만, 드루팔 6입니다.

답변:


87

해당 게시물 을 이미 찾았으므로 주석도 읽었는지 확인하십시오. 역할 점검보다 권한 점검이 권장되는 이유를 명확하게 설명합니다. 권한을 사용하면 해당 권한을 여러 역할에 할당하여 시스템을보다 유연하게 만들 수 있습니다. 또한 역할의 이름을 바꾸면 코드가 손상 될 수 있습니다.

즉, 역할을 확인하려면 다음을 수행하십시오.

// 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
둘 이상의 역할을 확인하려면 어떻게합니까? 예를 들어 "편집자"또는 "게시자"인 경우에는 멋진 작업을 수행하십시오. 코딩하는 법. 조언을 부탁 해요. 정말 알아낼 수 없습니다.
Adamtan

8
답을 읽으십시오 : 역할 (또는 둘 이상)을 확인하지 않는 것이 좋습니다. 대신 권한을 확인하십시오. 질문의 나머지 부분 (if 문에서 두 가지 조건을 결합)은 기본 PHP이며 Drupal과 관련이 없습니다. 논리 연산자 에 대한 PHP 문서를 읽으십시오 .
marcvangend

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
}

9

Drupal 버전> = 7.36 업데이트

Drupal API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7 에서 user_has_role 함수를 사용할 수 있습니다 .

이 예를보십시오 :

<?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 모듈을 설치하고 dpm ($ user)을 수행 할 수 있습니다. 사용자 역할을 포함한 모든 사용자 정보가 포함 된 배열을 인쇄합니다.

이 배열에서 "역할"의 배열 위치를 찾아 모듈에서이를 사용하여 사용자 역할을 찾을 수 있습니다.


개발-> PHP 코드 실행에서 다음을 입력하십시오. global $ user; dpm ($ 사용자);
diamondsea

1

역할 이름이 변경되는 경우 미래를 대비하려면 데이터베이스의 역할 테이블에서 찾을 수있는 역할 ID (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
}

1
실제로 역할과 같은 것을 마이그레이션하면 컴퓨터 이름이 유지되고 ID는 유지되지 않습니다.
Mołot

역할 테이블에는 기계 이름 만없고 사람 이름은 없습니다. users_roles 테이블은 UID를 제거에 할당합니다.
Hans Rossel

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!
    }
  }
?>

0

print_r ($ user)로 사용자의 역할을 확인할 수 있으며 출력에서 ​​이와 같은 것을 얻을 수 있습니다

stdClass 객체
(
    [uid] => 0
    [호스트 이름] => :: 1
    [역할] => 배열
        (
            [1] => anonymous user // 귀하의 경우 현재 사용자 역할이 익명입니다.
        )

0

사용자에게 특정 역할이 있는지 확인하려면 다음을 수행하십시오.

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

위의 답변이 작동하지 않았습니다. 확실하지 않습니다.이 게시물 과 코드는`

// $ user에게 관리자 역할이 있는지 확인하십시오. if (in_array ( 'administrator', array_values ​​($ user-> roles))) {// 무언가를합니다. }?>`

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.