액세스 인수와 액세스 콜백의 차이점은 무엇입니까?


21

액세스 인수와 액세스 콜백의 차이점은 무엇입니까?

나는에 대한 액세스 콜백을 설정한다고 가정 'user_access'하고, array('custom permission')액세스 인수의 값입니다.

그게 무슨 뜻이야? 그들은 서로에게 어떤 영향을 미칩니 까?

답변:


27

"액세스 콜백"은 사용자가 페이지에 액세스 할 수 있는지 확인하기 위해 호출되는 기능입니다. 특별한 경우에는 값이 될 수 있으며, TRUE이 경우 모든 사용자가 액세스 할 수 있습니다. 즉, 액세스 권한이 무시됩니다.

"access callback"값에 함수 이름을 사용하는 경우 (기본적으로 "user_access") "access arguments"를 사용할 수도 있습니다.이 액세스 인수는 액세스 콜백 함수에 전달 된 인수를 포함하는 배열입니다.
다른 메뉴 콜백과 마찬가지로 인수는 문자열 또는 숫자 여야합니다. 숫자 인 경우 값은 메뉴 경로에서 가져온 값으로 대체됩니다. 이 대체를 피하려면 숫자 대신 문자열을 사용해야합니다. 예를 들어, "1"액세스 콜백에 전달 된 인수에 대해 하나를 사용 하면 자동 교체를 피할 수 있습니다.

Drupal 코어 모듈에서 사용되는 메뉴 콜백 선언의 예입니다. (이 예제는 Drupal 7 코드에서 가져온 것이지만, 제가 지적하고자하는 것은 아무런 차이가 없습니다.)

액세스 콜백이 user_access () 인 예제 입니다.

  $items['file/progress'] = array(
    'page callback' => 'file_ajax_progress', 
    'delivery callback' => 'ajax_deliver', 
    'access arguments' => array('access content'), 
    'theme callback' => 'ajax_base_page_theme', 
    'type' => MENU_CALLBACK,
  );

액세스 콜백이 함수 이름이 아닌 예입니다.

  $items['user'] = array(
    'title' => 'User account', 
    'title callback' => 'user_menu_title', 
    'page callback' => 'user_page', 
    'access callback' => TRUE, 
    'file' => 'user.pages.inc', 
    'weight' => -10, 
    'menu_name' => 'user-menu',
  );

이 경우 액세스 콜백은 user_view_access () 로 전달 되며 user_view_access () 는 번호 1이 아니라 메뉴 경로에서 가져온 값 (이 경우 "user / % user")입니다. 함수가에 의해 반환 된 값을 가져 오기 때문에 이것은 특별한 경우 user_load()입니다.

  $items['user/%user'] = array(
    'title' => 'My account', 
    'title callback' => 'user_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'user_view_page', 
    'page arguments' => array(1), 
    'access callback' => 'user_view_access', 
    'access arguments' => array(1),
    // By assigning a different menu name, this item (and all registered child
    // paths) are no longer considered as children of 'user'. When accessing the
    // user account pages, the preferred menu link that is used to build the
    // active trail (breadcrumb) will be found in this menu (unless there is
    // more specific link), so the link to 'user' will not be in the breadcrumb. 
    'menu_name' => 'navigation',
  );

이전 메뉴가 다음과 같이 정의되고 "user / hello"와 같은 경로로 호출되었다고 가정하십시오.

  $items['user/%'] = array(
    'title' => 'My account', 
    'title callback' => 'user_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'user_view_page', 
    'page arguments' => array(1), 
    'access callback' => 'user_view_access', 
    'access arguments' => array(1),
    // By assigning a different menu name, this item (and all registered child
    // paths) are no longer considered as children of 'user'. When accessing the
    // user account pages, the preferred menu link that is used to build the
    // active trail (breadcrumb) will be found in this menu (unless there is
    // more specific link), so the link to 'user' will not be in the breadcrumb. 
    'menu_name' => 'navigation',
  );

이 경우 액세스 콜백은 경로에서 가져온 값을 인수로 수신했을 것입니다 (0은 "사용자"를 의미하고 1은 "사용자"와 슬래시 뒤의 부분을 의미 함). 이 경우 해당 값은 "hello"입니다.

이러한 와일드 카드 인수를 더 잘 이해하려면 와일드 카드 로더 인수를 참조하십시오 . 설명서 페이지에 Drupal 6 태그가 붙어 있지만보고 된 내용은 여전히 ​​Drupal 7에 유효합니다.


대단한 설명. 내 요구 사항에서 "지금 투표"라는 일부 사용자 정의 버튼은 인증 된 사용자 만 처리해야하지만 익명 사용자에게도 표시되어야하며 익명 사용자가 클릭하면 로그인 페이지로 리디렉션하고 프로세스를 계속해야합니다. 이 특정 시나리오의 경우 익명으로 버튼을 표시하는 특수 액세스 조건이 있습니까? 이 게시물을 더 완전한 위키로 만들 수 있기 때문에 여기에 댓글을 달았습니다. Bookmark .. :)
kiranking

4

액세스 콜백은 일부 사용자에게 권한이 있는지 확인하는 기능입니다. 기본 액세스 콜백은 user_access ()입니다.

액세스 인수는 액세스 콜백으로 검사되는 권한을 나열합니다. 예 : "액세스 내용"


또 다른 가치는 access callback무엇입니까? 그것이 아닌 다른 user_access()것이라면, 그 필요성이 사라질 것입니다 access arguments.
user1359

2
당신이 원하는대로. TRUE 또는 FALSE를 반환하는 함수
Berdir

그럼 당신은 필요하지 access arguments않습니까?
user1359 2016 년

예 당신은 그것을 건너 뛸 수 있습니다
Shoaib 나와 즈에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.