프로그래밍 방식으로 역할에 권한을 할당하는 방법


26

보다 쉬운 설치를 위해 프로그래밍 방식으로 일부 역할에 할당 할 권한이 있습니다.

모듈을 설치하고 권한과 역할을 모두 생성하기 때문에 권한을 설정하려는 역할 ID가 없습니다. 지금까지는 역할 ID가 필요한 프로그래밍 방식으로 역할할당 하는 방법 만 찾았습니다 .

어떻게 든 이름 (문자열)으로 역할을 조회하고 역할 ID를 검색 한 다음 권한을 할당 할 수 있는지 궁금합니다. 기분이 좋지 않습니다.


권한 테이블은 역할 이름이 아닌 역할 ID를 사용합니다. 역할 ID를 얻은 다음 해당 ID를 사용하여 권한을 추가해야합니다. 그런 다음 권한 테이블에는 권한에 대한 문자열과이를 구현하는 모듈의 이름이 필요합니다 (적어도 Drupal 7에서). 모듈 이름이 실제로 어떤 식으로 사용되는지 확실하지 않습니다.
kiamlaluno

사용해야하는 코드에 대해 이해하지 못하는 내용이 있습니까? 어떤 코드를 사용 했습니까? 코드를 보여주는 것이 유용 할 것입니다. 그것은 당신이해야 할 일을 제안하는 사람에게 도움이 될 것입니다 (예 : 코드에서 무엇이 잘못되었는지보고).
kiamlaluno

답변 해주셔서 감사합니다. 데이터베이스에서 ID를 찾아야한다고 생각합니다. 그렇게 어렵지 않아야합니다.
vogelsang 2012

답변:


1

기능 모듈은이 기능을 매우 잘 수행하므로 한 번에 역할과 권한 (및 기타 여러 가지)을 한 번에 내보낼 수 있습니다.

http://drupal.org/project/features

그러나 자신의 롤아웃 권한 API를 롤링하려면 다음을 수행하십시오.

http://drupal.org/project/permissions_api


2
문제는 기능을 설치할 때 기능이 할당되어 기능을 사용할 때 역할 ID를 알 수 없다는 것입니다. 따라서 권한을 할당 할 수있는 ID를 찾아야합니다. 아마도 데이터베이스에서 조회 일뿐입니다.
vogelsang 2013

24

기능은 이와 같은 것들에 매우 편리합니다. 그러나 프로그래밍 방식으로 역할을 만들고 권한을 추가해야하는 경우에는 데이터베이스를 직접 파헤칠 필요가 없습니다.

로 새 사용자 역할을 만들면 user_role_save()지정된 새 사용자 역할 ID로 전달한 객체가 업데이트됩니다. standard_install()표준 설치 프로파일 의 기능 에서이 예를 볼 수 있습니다 .

$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));

이 예는 새 사용자 역할을 만든 다음 rid에 채워진 해당 속성에 액세스 할 수 있음을 보여줍니다 user_role_save(). 또한을 사용하여 해당 역할에 권한을 추가하는 방법도 보여줍니다 user_role_grant_permissions(). 이 경우 '관리자'역할에 사용 가능한 모든 권한이 부여됩니다.

다른 사람이 작성한 사용자 역할의 ID user_role_load_by_name()를 가져와야하는 경우 해당 사용자 역할의 오브젝트를 얻는 데 사용할 수 있습니다 . 그런 다음으로 ID를 가져옵니다 $role->rid.


2
:이 한 번에 여러 권한을 / 부여 취소하는 좋은 api.drupal.org/api/drupal/modules%21user%21user.module/function/...
브라이언 우드


20

프로그래밍 방식으로 기존 역할에 권한을 할당하는 방법에 대한 원래 질문에 더 가까운 코드 예제를 추가하고 싶습니다.

이름으로 역할을 찾고 역할 ID를 검색 한 후 다음과 같이 권한을 할당 할 수 있습니다 (예 : hook_update 구현).

function custommodule_update_7001() {
  $permissions = array('view my custom entity');
  foreach(array('anonymous user', 'authenticated user') as $role_name) {
    $role = user_role_load_by_name($role_name);
    user_role_grant_permissions($role->rid, $permissions);
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.