답변:
해당 게시물 을 이미 찾았으므로 주석도 읽었는지 확인하십시오. 역할 점검보다 권한 점검이 권장되는 이유를 명확하게 설명합니다. 권한을 사용하면 해당 권한을 여러 역할에 할당하여 시스템을보다 유연하게 만들 수 있습니다. 또한 역할의 이름을 바꾸면 코드가 손상 될 수 있습니다.
즉, 역할을 확인하려면 다음을 수행하십시오.
// 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
}
현재 사용자에게 단일 역할 또는 여러 역할이 있는지 확인하려면 다음을 수행하는 것이 좋습니다.
//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
}
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...
}
}
?>
devel 모듈을 설치하고 dpm ($ user)을 수행 할 수 있습니다. 사용자 역할을 포함한 모든 사용자 정보가 포함 된 배열을 인쇄합니다.
이 배열에서 "역할"의 배열 위치를 찾아 모듈에서이를 사용하여 사용자 역할을 찾을 수 있습니다.
역할 이름이 변경되는 경우 미래를 대비하려면 데이터베이스의 역할 테이블에서 찾을 수있는 역할 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
}
다음 은 승인 된 답변에서 모범 사례로 언급 된 주석 의 실제 코드입니다.
<?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!
}
}
?>