web-gelistirme-sc.com

Kullanıcıların kendi içeriklerini yayından kaldırmasına ve yayınlamasına nasıl izin verebilirim?

Kullanıcıların kendi içeriklerini yayından kaldırmasına ve yayınlamasına izin vermek istiyorum. Varsayılan olarak, kullanıcıların içeriği yayından kaldırabilmeleri veya yayınlayabilmeleri için "yönetici düğümleri" izni vermeniz gerekir. Yine de genişlemenin yolu budur. Kullanıcıların yalnızca ve yalnızca oluşturduysa bir düğümü yayından kaldırmasına veya yayınlamasına izin vermek istiyorum. Bu aynı zamanda yayınlanmamış düğümleri yalnızca oluşturduysa görüntüleyebilmeleri gerektiği anlamına gelir.

30
Chaulky

Bazı sitelerde kullandığım bir UI yaklaşımı Geçersiz kıl Node Seçenekler modülü, diğer cevabımın sağladığı izinlere benzer izinler ve bir sürü ekstra.

20
Decipher

Bunun için her zaman İçeriği Yayınla modülünü kullanırız. Düğümlere çok sayıda ayrıntılı izin ve bir yayınla/yayından kaldır sekmesi ekler.

Bu modül

  • ayrıntılı yayınlama ve yayından kaldırma izinlerini etkinleştirir:
    • global (herhangi bir içeriği kaldırın/yayınlamayın)
    • "düğüm türü" başına (herhangi bir [nodetype] içeriğin un/yayınlanmaması)
    • kullanıcı başına (kendi [nodetype] içeriğinin çıkarılması/yayınlanması)
  • tek tıklamayla un/yayınlama için düğüm sayfasına bir "Yayınla/Yayından Kaldır" sekmesi ekler.
  • yorumlarınız için yayın akışını/yayından kaldırmayı gösterir, böylece gözden geçirenler, editörler ve yayıncılar için iş akışlarını kolaylaştırır.
  • hafif ve her zaman olacak.
20
marcvangend

Yukarıdaki yöntemlere göre size birkaç fayda sağlayan Revizyon Modülü yöntemini kullanmanızı öneririm. Tabii ki, tam olarak korunan bir modül olduğu için kodda çok fazla göz ve hata düzeltmeleri olacak. İkincisi, bunu genel iş akışınıza sığdırmak için daha fazla özellik elde edeceksiniz.

Kullanım durumunuz için kullanıcılarınıza hem "içerik oluşturucu" izinlerini hem de "moderatör" izinlerini verir, böylece temel olarak kendi içeriklerini denetleyebilirler, ancak modül açıklamasında belirtildiği gibi verilen 'yönetici düğümleri' vermek gibi tanrıya benzer güçler verirdi.

9
coderintherye

Bunu yapan bir modül var, ama adını tam olarak hatırlayamıyorum. Aslında modülün aldığı yaklaşımın çok hantal olduğunu hissettim, gerçek önemli kod sadece bazı izin mantığı ile sarılmış bir kod olduğunda çok fazla kod vardı.

Bu benim kod sürümü:

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

Bu, kullanıcıların kendi içerik türlerinin tümünü veya tümünü yayınlamalarına/yayından kaldırmalarına ve tüm içerik türlerine nasıl istediğinizi ayarlamanıza izin veren birkaç ekstra izin ekler.

6
Decipher

Sadece deşifre cevap güncellemek istiyorum, cadı bana Drupal 7 için uygun, başka bir modül eklemek istemiyorsanız en iyi yaklaşım dikişler:

/**
 * 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

Bunu Bayrak ve Kurallar modüllerinin gücünü birleştirerek başarabilirsiniz.

  1. Yeni bir Bayrak oluşturun Yayınlayın ve kullanıcılara yalnızca kendi içeriklerini işaretleme izni verin.
  2. Ardından, bir düğüm işaretlendiğinde tetiklenen ve işaretli düğümü yayınlayan yeni bir Kural ekleyin. Benzer şekilde, Yayınla Yayımla altında düğümsüz düğümleri yayımlayan ikinci bir Kural oluşturun.
  3. Son olarak, kullanıcılara kendi yayınlanmamış düğümlerini görme izni verin ve düğüm sayfalarına bir Yayınla bağlantısı ekleyin.
0
Jeroen