비 저자에 대한 "게시되지 않은 컨텐츠보기"권한


18

로그인 한 (관리자가 아닌) 사용자가 게시되지 않은 콘텐츠 (CSS 노드 게시 취소 클래스로 표시)를 볼 수있는 권한 수준의 방법이 있는지 조금 봤습니다. 이것은 Drupal 8에만 예정되어 있습니다. 그러나 누군가가 해결 방법을 수행하기에 충분히 영리했을 수 있습니까?

Content Editor게시되지 않은 모든 콘텐츠를 저자인지 여부에 관계없이 게시 할 수 없는 역할 이 있습니다.

답변:


17

아주 작은 커스텀 모듈을 작성하는 것이 좋으면 hook_permission()및 의 조합을 사용할 수 있습니다 hook_node_access().

function MYMODULE_permission() {
  return array(
    'unconditionally view unpublished content' => array(
      'title' => t('Unconditionally View Unpublished Content'),
      'restrict access' => TRUE
    )
  );
}

function MYMODULE_node_access($node, $op, $account) {
  // We're only bothered about the 'view' operation at the moment
  if ($op == 'view') {
    // If the user has access to our new permission, let 'em at it
    if (user_access('unconditionally view unpublished content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  // For everything else let the system decide.
  return NODE_ACCESS_IGNORE;
}

새 권한을 할당 한 모든 역할은 게시 여부에 관계없이 모든 노드를 볼 수 있습니다.


&& user_access('administer nodes')콘텐츠를 만들 수있는 권한에 따라 달라 지지만 보안을 조금 강화하려면 이제는 "무조건적"이 아닙니다. 예를 주셔서 감사합니다!
Artur

그래, 난 당신이 그것을 조금 비프하고 싶을 수도 있다고 언급했을 것이다 :) 기꺼이 도와 줘
Clive

다시 한번 좋은 소식, Clive. 이것은 내 문제 중 하나를 해결하고 특정 분류 용어로 노드에 대한 액세스를 제한합니다 !!!
uwe

1
이 코드는 실제로 "무조건으로 모든 내용보기"입니다. 노드가 게시되었는지 여부를 확인하지 않습니다. 또는 역할에 먼저 내용을 볼 수있는 권한이있는 경우.
JM01

6

먼저 위의 코드를 사용해 보았습니다. 그러나 게시되지 않은 콘텐츠에 대한 권한을 역할에 부여한 후에도 해당 역할은 여전히 ​​게시되지 않은 콘텐츠를 볼 수 없으며 일부 편집자 역할에 매우 유용 할 수 있습니다.

view_unpublished 모듈을 사용하여 해결했습니다 .


이 플러그인을 설치하고 문제를 해결하는 대신 내가 만든 사용자 지정 관리자 그룹에 대해 모든 내용이 표시되지 않았습니다.
mohamad salama

그런 행동을해서 미안 해요 나는 그것을 잠시 동안 사용 해 왔으며 어떤 역할에도 그런 PB를 갖지 못했습니다 (관리자 그룹이 역할을 의미한다면). DO 에 문제를 게시 할 수 있습니다 .
Kojo

3

이를 위해 수정 모듈을 사용합니다 . 설치시 각 컨텐츠 유형에 대해 다음 권한을 작성합니다.

  • 컨텐츠 유형 : 자체 컨텐츠의 개정판보기

  • 컨텐츠 유형 : 모든 사람의 컨텐츠 개정판보기

  • 컨텐츠 유형 : 자체 컨텐츠의 개정판 공개

  • 컨텐츠 유형 : 모든 사람의 컨텐츠 개정판 게시

편집자에게 누구나 컨텐츠의 개정판을 볼 수있는 권한을 부여하여 다른 사용자가 작성하거나 수정 한 모든 노드에 액세스하고 공개 할 수 있습니다.


1

이것이 내가 결국 만든 것입니다 ....

각 노드 유형에 대해 '모든 컨텐츠보기 권한'을 작성합니다. 노드 모듈과 거의 동일하지만 추가 옵션을 추가합니다.

/**
 * Implements hook_permission().
 */
function MODULE_permission() {
  $perms = array();
  foreach (node_permissions_get_configured_types() as $type) {
    $info = node_type_get_type($type);
    $perms += array(
      "view $type content" => array(
        'title' => t('%type_name: View any content', array('%type_name' => $info->name)),
      )
    );
  }
  return $perms;
}

/**
 * Implements hook_node_access().
 */
function MODULE_node_access($node, $op, $account) {
  $type = is_string($node) ? $node : $node->type;

  if (in_array($type, node_permissions_get_configured_types())) {
    if ($op == 'view' && user_access('view ' . $type . ' content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  return NODE_ACCESS_IGNORE;
}

1

Drupal 7 및 Drupal 8 용 모듈이 있습니다.

View_unpublished

이 모듈을 사용하면 특정 유형의 게시되지 않은 노드를 볼 수 있도록 특정 사용자 역할에 대한 액세스 권한을 부여 할 수 있습니다. 이와 관련하여 액세스 제어는 매우 세분화됩니다.



0

간단하고 합리적인 해결 방법은 노드에서 'promote to frontpage'플래그를 사용하는 것입니다.

이 플래그를 다른 용도로 사용하지 않는 경우 '프론트 페이지로 승격'에서보기를 필터링하십시오. 컨텐츠 편집기는 직접 링크를 사용하여 수준을 올리기 전에 노드에서 작업 할 수 있습니다. 그러나 사이트 방문자에게는 아직 나타나지 않을 것입니다.

YouTube의 '비공개 비디오'접근 방식에서 영감을 얻었습니다.


0

당신은 단지 비활성화 뷰의 내용을 참조해야하는 경우 SQL rewriting에를 Query Settings아래 Other뷰 UI한다.

사용자가 게시되지 않은 콘텐츠를 플래그 해제 할 수 있기를 원하기 때문에 이것은 나에게 효과적입니다.

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