it-swarm.dev

user_access ($ string) 함수에 사용 가능한 $ string 값 목록을 찾으려면 어떻게해야합니까?

user_access ($ 문자열, $ 계정 = NULL)

$ string : "관리 노드"와 같은 권한을 점검하고 있습니다.

user_access() 함수에 사용 가능한 $ string 값 목록을 찾으려면 어떻게해야합니까?

27
gilzero

모든 모듈이 자신의 권한을 정의 할 수있는 한 해당 문자열의 "엄격한"목록은 없습니다. 프로그래밍 방식으로 그러한 목록이 실제로 필요한 경우 "구문"을 작성해야합니다.

이 스크립트는/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);
  }
}
12
Haza

@Berdir이 말했듯이 사용 가능한 권한을 확인하는 가장 쉬운 방법은 Drupal 7의 권한 admin/people/permissions로 이동하는 것입니다.

내가 계속 겪고있는 문제는 실제로 권한을 사용하기 위해 '액세스 인수'로 제공 해야하는 문자열을 알 수 없다는 것입니다. 사용하려는 권한의 문자열 이름을 찾는 방법은 다음과 같습니다 (이 예는 Chrome을 사용합니다).

1 단계. 관리자/사람/권한으로 이동하여 사용하려는 권한을 찾은 다음 사용하려는 권한 오른쪽의 확인란을 마우스 오른쪽 단추로 클릭하십시오. '요소 검사'를 선택하거나 소스를 살펴보십시오.

Example

그런 다음 확인란의 값을 찾아서 값을 확인하십시오. (이 경우 문자열은 '쿠폰 컨텐츠 작성'입니다)

enter image description here

hook_men ()에서 액세스 인수로 제공해야하는 문자열입니다.

예제 코드 : ( hook_men ()에서 관련없는 항목이 제거되었습니다. 제목, 콜백 등을 잊지 마십시오)

function fsrsys_menu() {
    $items = array();
    $items['my-custom-url'] = array(
        'access callback' => 'user_access',
        'access arguments' => array('create coupon content'),
    );
    return $items;
}
26
Citricguy

다음은 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);
  }
}
9
fureigh

user_permission_get_modules() function을 사용하면 정의 된 모든 권한 및 해당 모듈의 배열을 반환합니다.

권한이 속하는 모듈을 결정하십시오.

반환 값

$ permission => $ module 형식의 연관 배열.

6
Елин Й.

가장 쉬운 방법은 권한 페이지 (D7 : admin/people/permissions, D6 : admin/user/permissions)를 확인하는 것입니다. Drupal 6에 표시된 문자열을 직접 사용한다는 점에 유의하십시오. 7의 경우 확인란 이름/값을 확인해야합니다. 권한이 Drupal 7에서 번역 된 제목과 설명을 갖기 때문입니다.

따라서 Drupal 7에서 "게시 된 컨텐츠보기"권한의 이름을 원하는 경우 값은 "액세스 컨텐츠"이며 이는 권한 이름입니다.

권한이 어느 모듈에서 오는지 알면 해당 모듈의 해당 hook_perm () (D6)/ hook_pemission () (D7) 구현을 확인할 수도 있습니다.

많은 경우에, 당신은 당신의 자신의 pemissions를 정의하고 이것을 사용하기를 원합니다. 위의 훅으로 그렇게 할 수 있습니다.

4
Berdir

개발 모듈 사용

  • Devel 모듈을 설치하고 활성화 한 후 admin/config/development/devel로 이동하십시오. "권한 및 모듈의 시스템 이름 표시"라는 제목의 설정이 있습니다. 반드시 확인하십시오.

  • 이제 people/permissions의 권한 페이지에서 질문중인 권한 이름 위로 마우스를 가져갑니다. 1-2 초 지연 될 수 있지만 문자열 값이 표시됩니다.

4
mlanning

나는 이것을 도와주는 this JavaScript snippet 을 만들었다. 나는 Drupal 7 Shiny theme 에서만 테스트했습니다.

기본적으로 시스템 이름을 해당 이름의 첫 번째 확인란에서 레이블 아래의 첫 번째 셀로 출력합니다. 이 스크립트는 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>");
});
1
Batandwa

다음은 권한 페이지의 이름에 권한 키를 추가하는 간단한 양식 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 . ')';
    }
  }
}
1
Randall Knutson

이것은 쉬운 모듈입니다 : Access Arguments List

문안 인사

1
Bilal
db_query("SELECT DISTINCT {permission} FROM role_permission");
1
emallove

일부 모듈을 드롭하면 / 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>)'; 
    }
}

문안 인사

0
Yurii K.