it-swarm.asia

كيفية تقييد الوصول المباشر إلى العقد؟

كيفية تقييد الوصول المباشر إلى العقد ولكن السماح فقط للمشاهدة بالوصول إلى الحقل المطلوب من نوع العقدة المحدد؟

على سبيل المثال في View Slideshow ، نقوم بتمرير حقل الصورة الذي ينتمي إلى نوع عقدة معين. لكننا لا نريد أن تصل محركات البحث ويصل الزائرون للوصول إلى العقد إلى هذا النوع من العقد.

أي اقتراحات؟

12
Fahad Ur Rehman

إذا قمنا بإلغاء نشر العقد التي تمت إضافتها بواسطة user1 ، فلن يتمكن أي مستخدم آخر من تحريرها حتى إذا كان للمستخدم الحق في تحرير محتوى نوع المحتوى هذا.

تقييد Node عرض الصفحة يبدو أفضل طريقة لتقييد الوصول المباشر إلى أي عقد من نوع محتوى معين.

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

http://drupal.org/project/restrict_node_page_view

من صفحة المشروع:

هل سبق لك استخدام نوع عقدة عرض الشرائح التي تحتاج إلى نشرها ولكنك لا تريد الوصول إلى العقدة بمفردها باستخدام مسار العقدة/XXX؟ هذه الوحدة لك!

باستخدام هذه الوحدة ، يمكنك تعطيل الوصول المباشر إلى صفحات العقد (node ​​/ XXX) بناءً على أنواع العقيدات والأذونات.

قم بتمكين الوحدة ولا تنسى تكوين أذوناتك.

3
Fahad Ur Rehman

قد يكون الحل البسيط هو عدم نشر العقد التي لا تريد الوصول إليها. لا يزال بإمكان المشاهدات سحب البيانات من تلك العقد.

12
googletorp

وحدة أخرى تفعل نفس الشيء ولكن مع المزيد من الوظائف.

أرنب حفرة

يطلب المشرفون على هذا المشروع "Restrict Node Page View" مشرف المشروع لدمج المشاريع في القضايا.

مزايا ضد "تقييد Node مشاهدة الصفحة":

  • الوظائف الرئيسية نفسها على العقدة ولكنها قابلة للتوسيع لمصطلحات المستخدمين/الملفات/التصنيف
  • يمكن استخدامها في الوحدة الخاصة بك
  • يمكن أن يكون عالميًا لنوع المحتوى أو على كل محتوى
  • انظر المزيد في صفحة المشروع ...

العيب ضد "تقييد Node عرض الصفحة":

  • المزيد من التعليمات البرمجية ربما أقل فعالية (تحتاج إلى اختبارات ، لم يثبت)
1
Payou

يجب عليك استخدام node_access() ، هناك خيارات معينة يمكنك تنفيذها بسهولة باستخدام hook_node_access(). يتيح لك تنفيذ node_access() اتخاذ قرار بشأن من يمكنه الوصول إلى العقدة ومن يمكنه إنشاء هذه العقدة أو حذفها أو تحريرها أو تحديثها. ومع ذلك ، لا يزال بإمكان المشاهدات سحب البيانات من هذه العقد على الإطلاق.

hook_node_access () ، node_access ()

1
gauravjeet

باستخدام القواعد الوحدة النمطية يمكنك تنفيذ قاعدة تبدو مشابهة لما يلي:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

لا تأخذ القاعدة أعلاه (حتى الآن) في الاعتبار تطبيق "الإجراء" فقط للأدوار المحددة فقط (على سبيل المثال ، حتى يتمكن المشرفون من استخدام هذه المسارات لعرض العقدة). ولكن بالنسبة لأي شخص على دراية بسيطة بوحدة القواعد ، فهذا هو "شرط" إلى الأمام مباشرة ...

لتجربة هذه القاعدة في موقعك ، ما عليك سوى نسخ رمز القواعد بالكامل أعلاه ولصقه في قاعدة جديدة في موقعك ، تم إنشاؤها عبر وظيفة "الاستيراد". ثم عدّل/صقل لجعلها ملائمة لبيئتك الخاصة (على سبيل المثال ، رسالة "عذرًا ، ..." ليتم عرضها).

0
Pierre.Vriens

مستوحاة من https://www.drupal.org/project/restrict_node_page_view يمكنك كتابة وحدة صغيرة بنفسك:

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

  // Default checks
  if (!is_object($node)) {
    return NODE_ACCESS_IGNORE;
  }

  $type = is_string($node) ? $node : $node->type;

  if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {

    // Restrict access to full MYTYPE node for anon users
    if ($type == 'MYTYPE' && user_is_anonymous()) {
      return NODE_ACCESS_DENY;
    }
  }
  // Default
  return NODE_ACCESS_IGNORE;
}
0
leymannx