역할 이름에서 역할 ID를 어떻게 찾습니까?


17

로그인 할 때 사용자의 타사 데이터 소스 (db의 테이블)를 확인하고 발견되면 해당 사용자에게 역할을 추가하려고합니다.

역할이 제거 된 것으로 추측하고 싶지 않으며 역할 이름에서 가져오고 싶습니다.

답변:


20

user_roles ()array_search () 사용하면 매우 간단 합니다. 아래는 이름과 일치하는 역할이 있으면 역할 ID를 반환하고 그렇지 않으면 FALSE를 반환하는 함수입니다.

function get_role_by_name($name) {
  $roles = user_roles();
  return array_search($name, $roles);
}

// Sample usage
$rid = get_role_by_name('administrator');

하나의 라이너는 다음과 같습니다.

$rid = array_search('administrator', user_roles());

1
user_roles ()에 의해 실행 된 쿼리 는 translatable 태그가 지정 됩니다 . 이는 모듈이 역할 이름을 번역 할 수 있음을 의미합니다. Drupal은 기본 역할 (익명 사용자 및 인증 된 사용자)에 대해서만 역할 이름을 변환합니다.
kiamlaluno

32

역할의 시스템 이름을 알고 있으면 충분합니다 user_role_load_by_name().

if ($role = user_role_load_by_name('Role Name')) {
  // The role ID is in $role->rid.
}

역할이 존재하지 않는 경우 ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;

3
다른 접근법과 마찬가지로 역할 이름을 번역 할 수 있기 때문에이 방식을 선호합니다. 실제로 user_roles ()에 의해 실행 된 쿼리 는 번역 가능 태그가 지정 됩니다 . Drupal은 기본 역할의 이름 만 번역하지만 모듈은 다른 역할 이름도 번역 할 수 있습니다.
kiamlaluno

4
$ rid = ($ role = user_role_load_by_name ())? $ role-> rid : NULL;
Pierre Buyle

-2

역할과 ID를 식별하는 가장 좋은 방법은 SQL입니다. SQL 편집기에서이 쿼리를 실행하십시오.

select * from roles;

그리고 id와 weight를 포함한 역할 목록을 얻게됩니다.


1
가장 좋은 방법은 Drupal에서 제공하는 API를 사용하는 것입니다. API가있을 때 데이터베이스에 직접 액세스하는 것은 결코 좋은 생각이 아니며 최선의 방법도 아닙니다.
kiamlaluno

이것은 역할을 얻는 매우 쉬운 방법입니다! Drupal Stack Exchange Police가 그러한 간단한 해결책을 투표 한 것에 놀라지 않습니다.
BlondeSwan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.