노드에 대한 직접 액세스를 제한하는 방법은 무엇입니까?


12

노드에 대한 직접 액세스를 제한하고 뷰가 특정 노드 유형의 필수 필드에 액세스하도록 허용하는 방법은 무엇입니까?

예를 들어 슬라이드보기보기에서는 특정 노드 유형에 속하는 이미지 필드를 슬라이딩합니다. 그러나 우리는 검색 엔진이 액세스하고 방문자가 해당 노드 유형에 속하는 노드에 액세스하는 것을 원하지 않습니다.

어떤 제안?

답변:


12

간단한 해결책은 액세스하고 싶지 않은 노드를 게시하지 않는 것입니다. 뷰는 여전히 해당 노드에서 데이터를 가져올 수 있습니다.


1
너무 간단합니까? '너무 간단한 해결책'과 같은 것은 없습니다. 복잡성은 그 자체가 목표가 아닌가? 아마도 Googletorp의 답변으로 특정 문제를 해결할 수는 없지만 그럴 경우 더 정교하고 이유를 설명해야합니다.
marcvangend

@marcvangend 늦었지만 내 질문에 대한 답이 아니라는 것을 알고 있습니다. 어떤 사람이 더 나은 답변을 추가 할 수 있기를 바랍니다
파하드 우르 레흐만

@Fahad 더 나은 답변을 얻으려면 더 나은 질문을해야합니다. Googletorp의 답변은 나에게 좋은 해결책처럼 보이며, 투표자들은 동의하는 것 같습니다. 문제가 해결되지 않으면 모든 관련 세부 정보를 추가하여 질문을 편집하십시오.
marcvangend

@marcvangend 실제로 내 문제가 해결되었으며 귀하의 의견에 비추어 이전에 답변을 수락했습니다. Googletorps는 평판이 매우 뛰어나서 그의 답변을 수락하거나 수락하지 않으면 아무런 차이가 없습니다. 그는 내가 그에게 투표 한 훌륭한 대안 솔루션을 제공했습니다.
Fahad Ur Rehman

@ Faahad 수락으로 당신이 말하는 답변 :이 답변은 내 문제를 해결했습니다. 강력한 답변으로 방문자가 방문하여 답변이 유용한 지 여부를 확인하는 데 매우 유용합니다. 내 대답으로 문제가 해결되지 않으면 질문을 편집하고 내 솔루션이 왜 효과가없고 marcvangend가 말한 것처럼 더 자세한 내용을 추가해야합니다.
googletorp

3

user1이 추가 한 노드를 게시 취소하면 해당 사용자가 해당 컨텐츠 유형의 컨텐츠를 편집 할 수있는 권한이 있더라도 다른 사용자가 편집 할 수 없습니다.

노드 페이지보기 제한은 특정 컨텐츠 유형의 모든 노드에 대한 직접 액세스를 제한하는 더 좋은 방법 인 것 같습니다.

사용법도 매우 간단합니다.이 모듈을 활성화하고 정상적으로 액세스 가능한 노드에 대한 권한을 구성하면됩니다.

http://drupal.org/project/restrict_node_page_view

프로젝트 페이지에서 :

게시해야하는 슬라이드 쇼 노드 유형을 사용한 적이 있지만 node / XXX 경로를 사용하여 자체적으로 노드에 액세스 할 수 없도록하려는 적이 있습니까? 이 모듈은 당신을위한 것입니다!

이 모듈을 사용하면 노드 유형 및 권한에 따라 노드 페이지 (노드 / XXX)에 대한 직접 액세스를 비활성화 할 수 있습니다.

모듈을 활성화하고 권한을 구성하는 것을 잊지 마십시오.


1

기능은 동일하지만 더 많은 기능을 수행하는 다른 모듈입니다.

토끼 구멍

이 프로젝트의 관리자는 "노드 페이지보기 제한"관리자에게 문제가있는 프로젝트를 병합하도록 요청합니다.

"노드 페이지보기 제한"에 대한 장점 :

  • 노드에서 동일한 주요 기능이지만 사용자 / 파일 / 택시 용어로 확장 가능
  • 모듈에서 사용 가능
  • 컨텐츠 유형 또는 모든 컨텐츠에 대해 글로벌 일 수 있음
  • 프로젝트 페이지에서 더보기 ...

"노드 페이지보기 제한"에 대한 단점 :

  • 코드가 많을수록 효과가 떨어질 수 있습니다 (테스트 필요, 증명되지 않음)

1

당신이 사용해야합니다 node_access(), 당신은 쉽게 사용하여 구현할 수있는 특정 옵션이 있습니다 hook_node_access(). 구현을 node_access()통해 노드에 액세스 할 수있는 사람과 해당 노드를 작성, 삭제, 편집 또는 업데이트 할 수있는 사람을 결정할 수 있습니다. 그러나 뷰는 여전히 이러한 노드에서 데이터를 가져올 수 있습니다.

hook_node_access () , node_access ()


0

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;
}

이 모듈은 이미 몇 년 전에 언급되었습니다. 귀하의 답변이 주제에 어떤 새로운 영향을 미치는지 설명해 주시겠습니까?
Mołot

@ Mołot-... 모듈을 직접 작성합니다. 수정 된 답변.
leymannx

0

규칙 모듈을 사용하면 다음과 유사한 규칙을 구현할 수 있습니다.

{ "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" } }
    ]
  }
}

위의 규칙은 선택된 역할에 대해서만 "작업"만 적용하기 위해 (아직) 고려하지 않습니다 (예 : 관리자가 여전히이 경로를 사용하여 노드를 볼 수 있도록). 그러나 규칙 모듈에 익숙한 사람이라면 누구나 추가 할 수있는 "조건"입니다.

자신의 사이트에서이 규칙을 실험하려면 위의 전체 규칙 코드를 복사하여 "가져 오기"기능을 통해 생성 된 새 규칙에 자신의 사이트에 붙여 넣으십시오. 그런 다음 자신의 환경에 맞도록 추가 편집 / 정의하십시오 (예 : "죄송합니다 ..."메시지가 표시됨).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.