web-gelistirme-sc.com

Hangi rollerin içerik türüne göre bir düğümü görüntüleyebileceğini sınırlama

Drupal 7 kullanıyorum ve "eBook" adında yeni bir içerik türü oluşturdum ve "MonthlySubscriber" adlı yeni bir rol oluşturdum. Amacım yalnızca "MonthlySubscriber" kullanıcılarına izin vermek Bir rolün izin ayarlarına baktığımda, o içerik türünün düğümlerini oluşturmaya, düzenlemeye ve silmeye izin veren onay kutularını gördüm, ancak düğümleri görüntülemek için onay kutusu yok.

"EKitap" düğümlerini görüntüleyebilen kullanıcıları yalnızca "MonthlySubscriber" rolüne sahip kullanıcılarla nasıl sınırlayabilirim?

17
John

Bu erişim kontrolünü eklemek için Content Access modülünü kurmanız gerekir.

Bu modül, içerik türleri için izinleri role ve yazara göre yönetmenizi sağlar. Her içerik türü için özel görünüm, düzenleme ve silme izinleri belirlemenizi sağlar.

13
iStryker

Düğüm sayfalarını (düğüm/NID) ayrıcalıksız kullanıcılardan korumanın basit bir yolu.

/**
 * Implements hook_menu_alter().
 */
function mymodule_menu_alter(&$items) {
  $items['node/%node']['access callback'] = 'mymodule_check_node_access';
}

/**
 * Determines whether the current user may perform the operation on the node.
 */
function mymodule_check_node_access($op, $node) {
  if ($node->type == 'protected_type' && !user_access('administer site configuration')) {
    return FALSE;
  }
  return node_access($op, $node);
}
5
ya.teck

drupal 7 için hook_node_access () :

/**
 * Implements hook_node_access().
 */
function YOURMODULE_node_access($node, $op, $account) {
  if (
    $node->type == 'ebook' &&
    $op == 'view' &&
    !in_array('MonthlySubscriber', $account->roles)
  ) { return NODE_ACCESS_DENY; }
  return NODE_ACCESS_IGNORE;
}
5
Denis

İçerik Erişimi Drupal 7 yüklemem için çalışmadı, bunun yerine Düğüm Görüntüleme İzinleri kullandım.

2
Sam King

drupal 7 için şunu deneyin: Terime Göre Erişim

D7 için çok esnek, hiyerarşik düğüm erişim kontrolü (içerik erişim kontrolü) sağlar.

1
washooo

Yukarıda ya.teck tarafından gönderilen hook_menu_alter çözümü çalışıyor, ancak işlev adındaki standart hook_node_access ile çakışıyor. Bu durumda hook_menu_alter gerekli değildir ve bu nedenle yukarıdaki Denis tarafından verilen cevap bence daha doğru ve doğru bir şekilde. Menu_item'i yapıldığı gibi değiştirmek ilk başvurulan örnek başka bir modül tarafından borunun aşağısında tıkanabilir.

0
ben.hamelin

Düğüm Görünümü İzinleri modülünü kullanarak perfer yapıyorum. İçerik Erişimi modülünden daha basittir.

D6'da olduğu gibi, seçtiğiniz herhangi bir içerik türüne "Herhangi bir içeriği görüntüle" ve "Kendi içeriğini görüntüle" izinleri ekler.

enter image description here

Takip edilecek adımlar:

  1. Yükledikten ve etkinleştirdikten sonra /admin/config/content/node-view-permissions ve erişimi sınırlamak istediğiniz içerik türlerini seçin.
  2. Sonra şuraya git /admin/people/permissions#module-node_view_permissions öğesini seçin ve içeriği görüntülemek istediğiniz rolleri seçin. İzinleri kaydedin.

    Bitti!

0
Chris Happy

hook_node_access hook için D7 api belgelerinde bulunan bir kod snippet'i kullandım.

Bu kod, "e-kitabı görüntüle" iznine sahip kullanıcılara "e-kitap" içeriğini görüntüleme erişimi verecektir.

Hook_permission () uygulayarak erişimi kontrol etmek için yeni bir izne ihtiyacınız var.

/**
 * Implements hook_permission().
 */
function mymodule_permission() {
  return array(
    'view ebook' => array(
      'title' => t('View Ebook'),
      'description' => t('View Ebook nodes.'),
    ),
  );
}

Hook_node_access () Drupal düğümü kullanarak erişim izni verebilir veya reddedebilir.

/**
 * Implements hook_node_access().
 */
function mymodule_node_access($node, $op, $account) {

  // Checks for an ebook node in view mode.
  if (is_object($node) && $node->type === 'ebook' && $op === 'view') {

    // Grants permission to view the node if the current user has an role
    // with the permission 'view ebook'.
    if (user_access('view ebook')) {
      return NODE_ACCESS_ALLOW;
    }

    // Otherwise disallows access to view the node.
    return NODE_ACCESS_DENY;
  }
  // For all other nodes and other view modes, don't affect the access.
  return NODE_ACCESS_IGNORE;
}

Diğer izinler (düzenleme, silme, vb.) Normal Drupal izinleri) ile ele alınabilir.

İsteğe bağlı olarak hook_query_TAG_NAME_alter uygulayarak içeriği yönetici genel bakışından kaldırabilirsiniz.

/**
 * Implements hook_query_TAG_NAME_alter().
 */
function mymodule_query_node_admin_filter_alter(QueryAlterableInterface $query) {
  if (!user_access('view ebook')) {
  $query->condition('n.type', 'ebook', '!=');
  }
}
0
batigolix