it-swarm-ko.tech

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

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

30
Chaulky

일부 사이트에서 사용한 UI 접근 방식은 Override Node Options 모듈입니다. 다른 답변에서 제공하는 것과 비슷한 권한과 추가 권한을 추가합니다.

20
Decipher

우리는 항상 Publish Content 모듈을 사용합니다. 노드에 여러 세분화 된 권한과 게시/게시 취소 탭을 추가합니다.

이 모듈

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

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

유스 케이스의 경우 사용자에게 "작성자"권한과 "수정 자"권한을 둘 다 제공하므로 기본적으로 자체 컨텐츠를 조정할 수 있지만 모듈 설명에서 말한 것처럼 '-관리 노드'를주는 것과 같은 신과 같은 힘이 주어지면 줄 것입니다.

9
coderintherye

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

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

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

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

6
Decipher

나는 단지 Drupal 7 :

/**
 * 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');
}
3
anou

FlagRules 모듈의 성능을 결합하여이를 달성 할 수 있습니다.

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