뷰는 SQL을 사용하여 표시 할 노드를 결정합니다. 안타깝게도, 성능상의 이유로 Drupal이 모든 잠재적 후보에 대해 node_load를 수행 한 후 각각의 후보에 대해 hook_node_access를 호출하는 것은 실현 가능하지 않습니다. 수천 개의 노드 (특히 호출기를 사용할 때)를 보여주는 뷰를 상상해보십시오. 논리가 SQL에서 수행되지 않으면 호출기는 매우 특이한 기능을 가지므로 Drupal은 데이터베이스에서 액세스 레코드를 사용하여 언급 한 것처럼 Drupal에서 강제로 수행합니다.
access_records를 만드는 것은 상당히 많은 작업이지만 SQL에서 작동하게합니다. 따라서 액세스 레코드를 사용하여 구현되어 뷰와 함께 작동하므로 가능한 경우 항상 기존 node_access 모듈을 사용하여 기능을 해결하는 것이 좋습니다.
그런데 액세스 레코드가 아래에 표시된 것처럼 node_access 테이블에 저장 됩니다.
각 열의 주석을 통해 목적을 이해할 수 있습니다. 영역을 노드 액세스에 사용되는 시스템으로, gid를 영역 내의 그룹으로 생각하십시오. 해당 그룹은보기, 업데이트 및 삭제 권한을 가질 수 있습니다. 일반적으로 각 node_access 모듈은 하나 이상의 영역을 정의합니다 (때로는 여러 개의 node_access 모듈도 병렬로 작동 할 수 있음). 사용자는 각 영역에 하나 이상의 gid가 있습니다.
Drupal에서 "node_access"태그가있는 모든 쿼리에는 자동으로 몇 가지 특수 로직이 추가됩니다. 태그 지정에 대한 자세한 내용은 설명서 를 참조하십시오 . 이 특수 로직은 각 영역에 대해 "node_access"테이블을 조인하고 "gid"가 사용자에게 적용된 gid 중 하나와 동일한 경우 사용자에게 적절한 권한이 있다는 조건을 추가합니다.
이 전체 시스템을 통해 모든 쿼리가 node_access, 심지어 쿼리 수 등을 올바르게 처리 할 수 있습니다. 매우 강력하지만 단순한 hook_node_access에 비해 학습 곡선이 높습니다. 가능하면 기존 node_access 모듈을 사용하면이 전체 두통을 줄일 수 있습니다.
hook_node_access()
Views 모듈 코드를 변경하기 위해 수행해야 할 작업이 있습니다.