2010-07-05 2 views
1

drupal 6을 실행하고이 기능을 코드화하려면 다음을 입력하십시오. 사용자가 형식 규칙을 작성한 후 추가 버튼을 클릭하면 해당 노드가 읽기 전용으로 만들어집니다.drupal 모듈로 노드 액세스 변경

나는 hidden_field와 여분의 버튼에 대해 생각했다. 사용자가 추가 버튼을 클릭하면 hidden_field를 true 상태로 설정했다. 노드를로드하고 hidden_field가 true 상태 인 경우 노드의 모든 필드를 읽기 전용으로 설정하려고합니다. (hook_access, node_access?!?)

푸후 ...이 모두가 너무 복잡하지 희망 (심지어 지금은 조금 혼란이기 때문에 ...)

답변

3

은 첫째로 당신은 사람을 중지 할 수 없습니다 사람 데이터베이스 또는 루트 사용자가 데이터를 볼 수 없도록 액세스 할 수 있습니다 (적어도 암호화가없는 경우는 제외).

일반적인 사이트 운영 측면에서 이렇게하기가 어렵지 않습니다. 당신이 호출해야하는 두 갈고리는 hook_node_grants()hook_node_access_records()입니다. 꽤 좋은 예가 있습니다. 이것은 질문에서 당신이 원하는 것을 거의 수행합니다 : here.

간단히 말하면 hook_node_access_records()는 조치를 수행 할 수있는 relms 및 ids를 자세히 설명하는 구조를 반환하고 hook_node_grants()는 사용자의 relms 및 ids를 반환합니다. 이 둘 사이에 일치가 있으면 액세스 (읽기 또는 쓰기)가 부여됩니다.

이렇게하면 많은 유연성을 얻을 수 있습니다. 한 가지 예는 사람들이 동일한 별표를 가진 다른 사람들이 만든 노드 만 읽을 수 있다는 것입니다. hook_node_grants에서 당신은 같은 것을 할 만든 사용자의 별자리를 확인해야 할 것 starsign을 얻고 $grants['starsign'] = 2

노드가 저장됩니다 hook_node_access_records를 반환하는 사용자 개체를 검사 할 것 :

$grants = array(); 
$grants[] = array(
    'realm' => 'starsign', 
    'gid' => $account->starsign, 
    'grant_view' => 1, 
    'grant_update' => 0, 
    'grant_delete' => 0, 
    'priority' => 0, 
); 
return $grants 

을 그 방법은 relm과 그룹 id가 일치하면 사용자에게 읽기 권한이 주어집니다.