답변:
모든 모듈이 자신의 권한을 정의 할 수있는 한 해당 문자열의 "엄격한"목록은 없습니다. 프로그래밍 방식으로 그러한 목록이 실제로 필요한 경우에는 "구성"해야합니다.
이 스크립트는 / devel / php 페이지에서 실행할 수 있습니다. (물론, Devel 모듈 이 필요합니다 .)
// Render role/permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
print_r($module);
// Drupal 6
// if ($permissions = module_invoke($module, 'perm')) {
// print_r($permissions);
// }
// Drupal 7
if ($permissions = module_invoke($module, 'permission')) {
print_r($permissions);
}
}
@Berdir이 말했듯이 사용 가능한 권한을 확인하는 가장 쉬운 방법은 Drupal 7의 권한 관리자 / 사람 / 권한으로 이동하는 것입니다.
내가 계속 겪고있는 문제는 실제로 사용 권한을 사용하기 위해 '액세스 인수'로 제공 해야하는 문자열을 알 수 없다는 것입니다. 사용하려는 권한의 문자열 이름을 찾는 방법은 다음과 같습니다 (이 예는 Chrome을 사용합니다).
1 단계. 관리자 / 사람 / 권한으로 이동하여 사용하려는 권한을 찾은 다음 사용하려는 권한 오른쪽의 확인란을 마우스 오른쪽 단추로 클릭하십시오. '요소 검사'를 선택하거나 소스를 살펴보십시오.
그런 다음 확인란의 값을 찾아서 값을 확인하십시오. (이 경우 문자열은 '쿠폰 내용 작성')
hook_menu () 에서 액세스 인수로 제공해야하는 문자열입니다.
예제 코드 : (관련이없는 항목이 제거되었습니다. hook_menu () 에서 제목, 콜백 등을 잊지 마십시오 )
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
다음은 print_r 대신 DSM을 사용하고 hook_permission을 구현하지 않는 모듈을 제외하도록 수정 된 Haza의 답변의 D7 버전입니다.
// Render permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
if ($permissions = module_invoke($module, 'permission')) {
// List only the modules that have permissions.
dsm($module);
dsm($permissions);
}
}
user_permission_get_modules()
정의 된 모든 권한 및 해당 모듈의 배열을 반환하는 function 을 사용할 수 있습니다 .
권한이 속하는 모듈을 결정하십시오.
반환 값
$ permission => $ module 형식의 연관 배열.
가장 쉬운 방법은 권한 페이지 (D7 : admin / people / permissions, D6 : admin / user / permissions)를 확인하는 것입니다. Drupal 6에 표시된 문자열을 직접 사용하므로 7의 경우 확인란 이름 / 값을 확인해야합니다. 권한이 이제 Drupal 7에서 제목과 설명을 번역했기 때문입니다.
따라서 Drupal 7에서 "게시 된 컨텐츠보기"권한의 이름을 원하는 경우 값은 "액세스 컨텐츠"이며 이는 권한 이름입니다.
권한이 어느 모듈에서 오는지 알고 있으면 해당 모듈의 해당 hook_perm () (D6) / hook_pemission () (D7) 구현을 확인할 수도 있습니다.
많은 경우에, 당신은 당신의 자신의 pemissions를 정의하고 이것을 사용하기를 원합니다. 위의 훅으로 그렇게 할 수 있습니다.
개발 모듈 사용
Devel 모듈을 설치하고 활성화 한 후로 이동하십시오 admin/config/development/devel
. "권한 및 모듈의 시스템 이름 표시"라는 제목의 설정이 있습니다. 반드시 확인하십시오.
의 권한 페이지에서 people/permissions
질문중인 권한 이름 위로 마우스를 가져갑니다. 1-2 초 지연 될 수 있지만 문자열 값이 표시됩니다.
다음은 권한 페이지의 이름에 권한 키를 추가하는 간단한 양식 alter입니다. 쉽게 찾을 수 있어야합니다. 사용자 정의 모듈에 추가하고 "mymodule"을 해당 모듈의 이름으로 바꿔야합니다.
/**
* Implements hook_form_FORM_ID_alter().
*/
function mymodule_form_user_admin_permissions_alter(&$form, $form_state) {
foreach ($form['permission'] as $key => &$item) {
if (isset($item['#type']) && $item['#type'] == 'item') {
$item['#markup'] .= ' (' . $key . ')';
}
}
}
나는 이것을 도와주는 JavaScript 스 니펫 을 만들었습니다 . Drupal 7에서는 Shiny 테마 에서만 테스트했습니다 .
기본적으로 시스템 이름을 해당 이름의 첫 번째 확인란에서 레이블 아래의 첫 번째 셀로 출력합니다. 이 스크립트는 jQuery에 의존하며 Drupal 7에서는 문제가되지 않습니다.
일반적으로 개발자 도구 콘솔에 붙여넣고 거기서 실행합니다. 나중에 북마크를 만들 수도 있습니다.
// Go through each of the rows on the permissin table
rows = jQuery('#permissions tr');
rows.each(function() {
// Get the first checkbox in the row.
checkbox = jQuery('.checkbox .form-checkbox', this).first();
// Get the first cell, containing the permission label.
nameCell = jQuery('td:first-child', this);
// In case this is not a permission row
if(checkbox.length == 0) {
return;
}
// Embed the permission maching name on permission label cell.
nameCell.append("<div><code>" + checkbox.val() + "</code></div>");
});
이것은 쉬운 모듈입니다 : Access Arguments List
문안 인사
일부 모듈 만 드롭하면 / admin / people / permissions에 시스템 권한이 표시됩니다.
function YOURMODULE_form_user_admin_permissions_alter(&$form, &$form_state)
{
$perms = &$form['permission'];
$group_counter = 0;
foreach ($perms as $k => &$v) {
if ($k == $group_counter) { // skip fieldsets
$group_counter++;
continue;
}
$v['#markup'] .= ' (<span class="description" style="color:brown">'.$k.'</span>)';
}
}
문안 인사
array_keys()
하면 분명히 요청 된 정보를 얻을 수 있습니다. 그런 다음user_role_grant_permissions
예를 사용하여 관리자 역할에 모든 권한을 부여 할 수도 있습니다 .user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));