सीमाएँ जो अपने सामग्री प्रकार पर एक नोड आधार को देख सकती हैं


18

मैं Drupal 7 का उपयोग कर रहा हूं और मैंने एक नया कंटेंट टाइप बनाया है, जिसे "eBook" कहा जाता है, और मैंने एक नया रोल बनाया है, जिसका नाम है "मंथलीबस्क्राइबर।" मेरा इरादा "ई-मेल" नोड्स को देखने के लिए केवल "MonthlySubscriber" वाले उपयोगकर्ताओं को अनुमति देना है। जब मैंने किसी भूमिका के लिए अनुमति सेटिंग्स को देखा, तो मैंने उस सामग्री प्रकार के नोड्स बनाने, संपादित करने और हटाने की अनुमति देने वाले चेकबॉक्स देखे, लेकिन नोड्स देखने के लिए कोई चेकबॉक्स नहीं हैं।

मैं उन उपयोगकर्ताओं को कैसे सीमित कर सकता हूं जो "ई-मेल" नोड्स को "मंथलीस्क्राइबर" भूमिका वाले उपयोगकर्ताओं को देख सकते हैं?

जवाबों:


13

इस एक्सेस कंट्रोल को जोड़ने के लिए आपको कंटेंट एक्सेस मॉड्यूल इंस्टॉल करना होगा।

यह मॉड्यूल आपको भूमिका और लेखक द्वारा सामग्री प्रकारों के लिए अनुमतियों को प्रबंधित करने की अनुमति देता है। यह आपको प्रत्येक सामग्री प्रकार के लिए कस्टम दृश्य निर्दिष्ट, संपादित करने और हटाने की अनुमति देता है।


5

ड्रुपल 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;
}

1
कृपया कोड-ओनली उत्तरों से बचें। वे सीखने के उद्देश्य को पूरा नहीं करते हैं। कम से कम एक वाक्य या तीन में बताएं कि यह विशेष कोड वास्तव में एक उत्तर कैसे है? यह कैसे काम करता है? यह क्यों काम करता है? जिस तरह का विवरण दूसरों को बार-बार पूछने के बजाय समान स्थिति में समान कोड लिखने में मदद करेगा।
मोलॉट

यह सही उत्तर होना चाहिए।
ग्रैफीकोड

5

यहाँ एक सरल तरीका है नोड पेजों (नोड / एनआईडी) की रक्षा अनपेक्षित उपयोगकर्ताओं से।

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

2
ध्यान दें कि उपयोग hook_node_accessकिसी भी चीज से काम नहीं करेगा जो "सूची" नोड्स, जैसे एक दृश्य। इसलिए आप दृश्य पहुंच को प्रतिबंधित कर सकते हैं hook_node_access, लेकिन एक दृश्य या कस्टम नोड क्वेरी अभी भी उपयोगकर्ता को उस नोड को दिखा सकती है। hook_node_accessसंपादकीय नियंत्रण के लिए अधिक उपयोगी है, बनाने / अद्यतन / हटाने के संचालन को नियंत्रित करने के लिए
ब्रायन

आपका कोड मेरे लिए काम नहीं करता है, लेकिन आपने मुझे सही दिशा में इशारा किया है। मुझे हुक_नोड_एक्सेस डॉक्यूमेंट api.drupal.org/api/drupal/modules%21node%21node.api.php/…-
कैमिलो

यह एक खराब उदाहरण है क्योंकि यह कस्टम फ़ंक्शन के रूप में mymodule_node_access का उपयोग करता है जबकि Drupal एक hook_node_access हुक प्रदान करता है। यह भ्रामक बन सकता है।
बत्तीगोलिक्स

@batigolix, जैसा कि उत्तर में कहा गया है कि यह नोड पेजों की रक्षा करने का एक तरीका है नोड्स नहीं।
येक।


1

ड्रुपल 7 के लिए, इसे आज़माएँ: एक्सेस बाय टर्म

डी 7 के लिए बहुत लचीला, श्रेणीबद्ध नोड अभिगम नियंत्रण (सामग्री अभिगम नियंत्रण) प्रदान करता है।


0

Ya.teck द्वारा ऊपर पोस्ट किया गया hook_menu_alter समाधान कार्य करता है, लेकिन इसके फ़ंक्शन नाम में मानक hook_node_access के साथ विरोध करता है। इस मामले में the__manu_alter की आवश्यकता नहीं है, और इसलिए ऊपर डेनिस द्वारा पोस्ट किया गया उत्तर मेरी राय में अधिक सटीक और उचित तरीके से है। जैसा कि किया गया है मेनू_मिट को बदलकर पहला संदर्भित उदाहरण पाइप के नीचे एक और मॉड्यूल द्वारा बंद किया जा सकता है।


0

मैंने हुक_node_access हुक के लिए D7 एपीआई प्रलेखन में पाया गया एक कोड स्निपेट का उपयोग किया ।

यह कोड "ईबुक" की अनुमति वाले उपयोगकर्ताओं के लिए "ईबुक" सामग्री को देखने के लिए पहुंच प्रदान करेगा।

आपको हुक_प्रवेश () लागू करके पहुंच को नियंत्रित करने के लिए एक नई अनुमति की आवश्यकता है।

/**
 * 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 अनुमतियों के माध्यम से निपटा जा सकता है।

वैकल्पिक रूप से आप हुक_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

मैं नोड दृश्य अनुमतियाँ का उपयोग कर रहा हूँ मॉड्यूल । यह सामग्री एक्सेस मॉड्यूल की तुलना में सरल है।

D6 की तरह, यह "किसी भी सामग्री को देखें" और आपके द्वारा चुनी गई किसी भी सामग्री प्रकार की "अपनी सामग्री देखें" अनुमतियां जोड़ता है।

यहाँ छवि विवरण दर्ज करें

अनुसरण करने के चरण:

  1. इंस्टॉल करने और सक्षम करने के बाद, /admin/config/content/node-view-permissionsउन सामग्री प्रकारों पर जाएं और चुनें जो आप एक्सेस को सीमित करना चाहते हैं।
  2. फिर, /admin/people/permissions#module-node_view_permissions उन भूमिकाओं को चुनें और चुनें जिन्हें आप सामग्री को देखने में सक्षम होना चाहते हैं। अनुमतियाँ सहेजें।

    किया हुआ!



@KarthikeyanManivasagam ऐसा कैसे?
क्रिस हैप्पी

हमने इस मॉड्यूल का उपयोग अपनी एक परियोजना में किया है जहाँ हमें भूमिका और सामग्री प्रकार के आधार पर सामग्री दृश्य पहुँच प्रदान करने की आवश्यकता है, लेकिन यह बिल्कुल भी काम नहीं कर रहा है। यह इस मॉड्यूल का उपयोग किए बिना वैसा ही व्यवहार करता है।
कार्तिकेयन मणिवसगाम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.