답변:
간단한 해결책은 액세스하고 싶지 않은 노드를 게시하지 않는 것입니다. 뷰는 여전히 해당 노드에서 데이터를 가져올 수 있습니다.
user1이 추가 한 노드를 게시 취소하면 해당 사용자가 해당 컨텐츠 유형의 컨텐츠를 편집 할 수있는 권한이 있더라도 다른 사용자가 편집 할 수 없습니다.
노드 페이지보기 제한은 특정 컨텐츠 유형의 모든 노드에 대한 직접 액세스를 제한하는 더 좋은 방법 인 것 같습니다.
사용법도 매우 간단합니다.이 모듈을 활성화하고 정상적으로 액세스 가능한 노드에 대한 권한을 구성하면됩니다.
http://drupal.org/project/restrict_node_page_view
프로젝트 페이지에서 :
게시해야하는 슬라이드 쇼 노드 유형을 사용한 적이 있지만 node / XXX 경로를 사용하여 자체적으로 노드에 액세스 할 수 없도록하려는 적이 있습니까? 이 모듈은 당신을위한 것입니다!
이 모듈을 사용하면 노드 유형 및 권한에 따라 노드 페이지 (노드 / XXX)에 대한 직접 액세스를 비활성화 할 수 있습니다.
모듈을 활성화하고 권한을 구성하는 것을 잊지 마십시오.
당신이 사용해야합니다 node_access()
, 당신은 쉽게 사용하여 구현할 수있는 특정 옵션이 있습니다 hook_node_access()
. 구현을 node_access()
통해 노드에 액세스 할 수있는 사람과 해당 노드를 작성, 삭제, 편집 또는 업데이트 할 수있는 사람을 결정할 수 있습니다. 그러나 뷰는 여전히 이러한 노드에서 데이터를 가져올 수 있습니다.
https://www.drupal.org/project/restrict_node_page_view에서 영감을 받아 작은 모듈을 직접 작성할 수 있습니다.
/**
* Implements hook_node_access()
*/
function MYMODULE_node_access($node, $op, $account) {
// Default checks
if (!is_object($node)) {
return NODE_ACCESS_IGNORE;
}
$type = is_string($node) ? $node : $node->type;
if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {
// Restrict access to full MYTYPE node for anon users
if ($type == 'MYTYPE' && user_is_anonymous()) {
return NODE_ACCESS_DENY;
}
}
// Default
return NODE_ACCESS_IGNORE;
}
규칙 모듈을 사용하면 다음과 유사한 규칙을 구현할 수 있습니다.
{ "rules_check_url" : {
"LABEL" : "Disallow node/* access",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"ON" : { "init" : [] },
"IF" : [
{ "text_matches" : {
"text" : [ "site:current-page:url" ],
"match" : "node\/\\d+$",
"operation" : "regex"
}
}
],
"DO" : [
{ "drupal_message" : {
"message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
"type" : "error"
}
},
{ "redirect" : { "url" : "no_access" } }
]
}
}
위의 규칙은 선택된 역할에 대해서만 "작업"만 적용하기 위해 (아직) 고려하지 않습니다 (예 : 관리자가 여전히이 경로를 사용하여 노드를 볼 수 있도록). 그러나 규칙 모듈에 익숙한 사람이라면 누구나 추가 할 수있는 "조건"입니다.
자신의 사이트에서이 규칙을 실험하려면 위의 전체 규칙 코드를 복사하여 "가져 오기"기능을 통해 생성 된 새 규칙에 자신의 사이트에 붙여 넣으십시오. 그런 다음 자신의 환경에 맞도록 추가 편집 / 정의하십시오 (예 : "죄송합니다 ..."메시지가 표시됨).