it-swarm.asia

حدد الأدوار التي يمكنها عرض العقدة بناءً على نوع محتواها

أنا أستخدم Drupal 7 وأنشأت نوع محتوى جديدًا يسمى "eBook" ، وأنشأت دورًا جديدًا يسمى "MonthlySubscriber". وأعتزم السماح للمستخدمين الذين لديهم "MonthlySubscriber" فقط) لعرض عُقد "الكتاب الإلكتروني". عندما ألقيت نظرة على إعدادات الإذن لدور ، رأيت مربعات الاختيار التي تسمح بإنشاء وتحرير وحذف العقد من نوع المحتوى هذا ، ولكن لا توجد مربعات اختيار لعرض العقد.

كيف أقصر المستخدمين الذين يمكنهم عرض عقد "الكتاب الإلكتروني" على المستخدمين الذين لديهم دور "الشهري الشهري"؟

17
John

تحتاج إلى تثبيت الوصول إلى المحتوى وحدة لإضافة التحكم في الوصول.

تتيح لك هذه الوحدة إدارة الأذونات لأنواع المحتوى حسب الدور والمؤلف. يسمح لك بتحديد أذونات عرض وتحرير وحذف مخصصة لكل نوع محتوى.

13
iStryker

فيما يلي طريقة بسيطة لحماية صفحات العقدة (node ​​/ NID) من المستخدمين غير المحظوظين.

/**
 * 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 ، حاول استخدام 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

لم يعمل Content Access مع تثبيت Drupal 7 ، لذلك استخدمت أذونات عرض العقدة بدلاً من ذلك.

2
Sam King

من أجل drupal 7 ، جرب هذا: Access by Term

يوفر التحكم في الوصول إلى العقدة الهرمية المرنة للغاية (التحكم في الوصول إلى المحتوى) ، لـ D7.

1
washooo

يعمل حل hook_menu_alter المنشور أعلاه بواسطة ya.teck ، لكنه يتعارض مع hook_node_access القياسي في اسم وظيفته. hook_menu_alter غير مطلوب في هذه الحالة ، وبالتالي فإن الإجابة التي نشرها دينيس أعلاه هي في رأيي أكثر دقة وطريقة مناسبة. تغيير menu_item كما يتم هو أول مثال مرجعي يمكن أن تفسده وحدة أخرى في أسفل الأنبوب.

0
ben.hamelin

أتصور استخدام أذونات عرض العقدة الوحدة النمطية. إنه أبسط من وحدة الوصول إلى المحتوى.

كما في D6 ، تضيف أذونات "عرض أي محتوى" و "عرض المحتوى الخاص" إلى أي نوع محتوى تختاره.

enter image description here

الخطوات لمتابعة:

  1. بعد التثبيت والتمكين ، انتقل إلى /admin/config/content/node-view-permissions وحدد أنواع المحتوى التي تريد تقييد الوصول إليها.
  2. ثم اذهب الى /admin/people/permissions#module-node_view_permissions وحدد الأدوار التي تريد أن تكون قادراً على عرض المحتوى. حفظ الأذونات.

    منجز!

0
Chris Happy

لقد استخدمت مقتطف شفرة موجود في وثائق واجهة برمجة التطبيقات D7 لـ hook_node_access hook .

يمنح هذا الرمز الوصول لعرض محتوى "الكتاب الإلكتروني" للمستخدمين الذين لديهم إذن "عرض الكتاب الإلكتروني".

تحتاج إلى إذن جديد للتحكم في الوصول من خلال تنفيذ hook_permission ().

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

من خلال تنفيذ hook_node_access () Drupal يمكنه منح أو رفض الوصول إلى العقدة.

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

يمكن التعامل مع أذونات أخرى (تحرير ، حذف ، إلخ) عبر أذونات عادية Drupal.

بشكل اختياري ، يمكنك إزالة المحتوى من نظرة عامة للمشرف من خلال تنفيذ hook_query_TAG_NAME_alter.

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