사용자가 자신의 콘텐츠를 게시 취소하고 게시하게하려면 어떻게해야합니까?


30

사용자가 자신의 콘텐츠를 게시 취소하고 게시하게하고 싶습니다. 기본적으로 사용자가 컨텐츠를 게시 취소하거나 게시 할 수 있도록 "관리 노드"권한을 부여해야합니다. 그것은 넓게하는 방법입니다. 사용자가 노드를 만든 경우에만 게시를 취소하거나 게시 할 수 있도록하고 싶습니다. 또한 게시되지 않은 노드를 만든 경우에만 게시 할 수없는 노드를 볼 수 있어야합니다.

답변:


20

일부 사이트에서 사용한 UI 접근 방식은 노드 옵션 무시 모듈이며, 다른 답변에서 제공하는 것과 유사한 권한을 추가합니다.


이것은 가장 간단한 접근법 인 것 같습니다 ... 현재 나를 위해 일하고 있습니다. 감사!
Chaulky

관리 노드없이 게시 및 고정을 허용 할 수 있으므로 이것이 가장 좋습니다. :)
Alex Weber

이 문제를 해결하기위한 훌륭한 모듈 인 것 같습니다.
zilverdistel

20

우리는이를 위해 항상 컨텐츠 게시 모듈을 사용합니다. 노드에 여러 세분화 된 권한과 게시 / 게시 취소 탭을 추가합니다.

이 모듈

  • 세분화 된 게시 및 게시 취소 권한을 활성화합니다.
    • 글로벌 (모든 콘텐츠 게시 / 해제)
    • "노드 유형"당 (모든 [노드 유형] 컨텐츠를 게시 / 해제)
    • 사용자 당 (자신의 [노드 타입] 컨텐츠 게시 / 해제)
  • 한 번의 클릭으로 게시 취소 / 게시를 위해 "게시 / 게시 취소"탭을 노드 페이지에 추가합니다.
  • 뷰에 대한 게시 / 게시 취소 링크를 제공하여 검토 자, 편집자 및 게시자를위한 워크 플로를 능률화합니다.
  • 가볍고 항상있을 것입니다.

9

위의 방법에 비해 몇 가지 이점을 제공 하는 개정 모듈 을 사용하는 것이 좋습니다 . 물론 모듈은 완전히 유지 관리되는 모듈이므로 코드에 많은 관심과 버그 수정이있을 것입니다. 둘째, 전반적인 워크 플로에 더 많은 기능을 제공합니다.

사용 사례를 들어 그들은 기본적으로 자신의 콘텐츠를 완화 할 수 있도록, 사용자은 "창조자"권한과 "사회자"권한을 모두 제공하지만, 모듈 설명에서 말한 것처럼, 그들은되어 있지 '신과 같은 등의 제공과 같은 권한을 부여 관리 노드 '줄 것이다.


이것은 매우 흥미로운 옵션이지만 필요한 것보다 더 많은 방법이 있습니다. 내가 알고 있다는 것이 기쁘다 고 생각했지만, 다른 사이트가 유용 할 것이라고 생각할 수 있습니다.
Chaulky

6

이 작업을 수행하는 모듈이 있지만 이름을 기억할 수 없습니다. 실제로 모듈이 취한 접근 방식이 너무 번거 롭다고 생각했습니다. 실제 중요한 코드가 실제로 한 줄의 권한 논리로 싸여있을 때 많은 코드가있었습니다.

이것은 내 코드 버전입니다.

function MYMODULE_perm() {
  $perms[] = 'administer status of any content';

  foreach (node_get_types() as $type) {
    if (isset($type->type)) {
      $perms[] = 'administer status of any '. check_plain($type->type) .' content';
      $perms[] = 'administer status of own '. check_plain($type->type) .' content';
    }
  }

  return $perms;
}

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'node-form' && $form_id == "{$form['#node']->type}_node_form" && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}

사용자가 자신의 모든 콘텐츠 유형과 모든 콘텐츠 유형을 게시 / 게시 취소 할 수있는 몇 가지 추가 권한이 추가되어 원하는 방식을 설정할 수 있습니다.


고마워, 그것은 꽤 좋아 보인다. 게시되지 않은 콘텐츠를 볼 수 있다면 어떨까요? 그들이 그것을 볼 수 없다면, 그것을 어떻게 출판 할 것인가?
Chaulky

IIRC 사용자는 '관리 노드'가 있는지 여부에 관계없이 게시되지 않은 컨텐츠를 볼 수 있습니다.
Decipher

3

Drupal 7에 맞게 다른 모듈을 추가하지 않으려는 경우 Decipher 응답을 업데이트하고 마녀 솔기가 가장 좋은 방법입니다.

/**
 * Implements hook_permission().
 */
function MYMODULE_permission() {  
  $perms = array(
    'administer status of any content' => array(
      'title' => t('Administer status for all content type'),
      'description' => t(''),
      'restrict access' => true
    ),
  );

  foreach (node_type_get_types() as $type) {
    if (isset($type->type)) {
      $perm_types = array(
        'administer status of any '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of any '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),

        'administer status of own '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of own '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),
      );
      $perms = array_merge($perms,$perm_types);
    }
  }

  return $perms;
}


function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if (preg_match('/_node_form$/', $form_id) && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}

오타가 있습니다. $ perms_type을 $ perm_types로 바꾸십시오 – 그리고 모든 / 자신의 상태는 점검되지 않습니다.
rémy

0

플래그규칙 모듈 의 기능을 결합하여이를 달성 할 수 있습니다 .

  1. 새 플래그 게시를 만들고 사용자에게 자신의 콘텐츠에만 플래그를 지정할 수있는 권한을 부여 하십시오 .
  2. 그런 다음 노드에 플래그가 지정 될 때 트리거되고 플래그가 지정된 노드를 게시하는 새 규칙을 추가하십시오. 마찬가지로 Publish 아래에 표시되지 않은 노드를 게시 취소하는 두 번째 규칙을 만듭니다 .
  3. 마지막으로, 사용자에게 자신의 게시되지 않은 노드 를보고 노드 페이지에 게시 링크를 추가 할 수있는 권한을 부여하십시오 .

-1

그만큼 콘텐츠 액세스 모듈은 당신이 원하는 것을 포함해야한다.

이 모듈을 사용하면 역할 및 작성자별로 컨텐츠 유형에 대한 권한을 관리 할 수 ​​있습니다. 각 컨텐츠 유형에 대한 사용자 정의보기, 편집 및 삭제 권한을 지정할 수 있습니다. 선택적으로 컨텐츠 별 액세스 설정을 사용할 수 있으므로 각 컨텐츠 노드에 대한 액세스를 사용자 정의 할 수 있습니다.


1
막연한 답변. 이것이 Decipher의 답변보다 선호된다면이 접근법의 이점에 대해 자세히 설명 할 수 있습니까?
Chris Cohen

컨텐츠 액세스 모듈은 실제로 문제점을 해결하지 않으며 역할별로보기, 편집 및 삭제를 설정하지만 공개는 설정하지 않는 기능을 추가합니다.
Decipher
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.