"অ্যাক্সেস অস্বীকৃত" পৃষ্ঠা আউটপুট হলে কোনও মডিউল কীভাবে সনাক্ত করতে পারে?


16

যখন দ্রুপাল "অ্যাক্সেস অস্বীকৃত" পৃষ্ঠা আউটপুট দিচ্ছে তখন কোনও মডিউল সনাক্ত করা কীভাবে সম্ভব?
ড্রুপাল 6 দিয়ে এটি কীভাবে করা যায় তা আমি জানি; ড্রুপাল 7 দিয়ে এটি কীভাবে করা যায় তা আমার জানতে হবে।

উত্তর:


13

403 এবং 404 ত্রুটি দেখা দিলে কোন পৃষ্ঠা প্রদর্শিত হবে তা আপনি সেট করতে পারেন (অ্যাডমিন / সেটিংস / ত্রুটি-প্রতিবেদন)।

আমার ধারণা আপনি আপনার মধ্যে একটি নতুন পৃষ্ঠা যুক্ত করতে পারেন hook_menu(), তারপরে এই পৃষ্ঠাটিকে 403 ত্রুটি কলব্যাক হিসাবে সেট করুন। যখন আপনার কাস্টম মেনু কলব্যাক হিট হবে, আপনি জানেন যে আপনি "অ্যাক্সেস অস্বীকৃত" পৃষ্ঠা আউটপুট করছেন!


এই হিসাবে এই আউটপুট পরিবর্তন করা হয় না শুধুমাত্র 403. সনাক্ত আমার জন্য একটি ভাল সমাধান নয়
Fabien Quatravaux

12

আমি এটি বুস্ট 7.x এ করি এটি সুন্দর নয়, তবে এটি কাজটি সম্পন্ন করে।

function boost_page_delivery_callback_alter(&$callback, $set = FALSE) {
  if ($callback == 'drupal_deliver_html_page') {
    $callback = 'boost_deliver_html_page';
  }
}

function boost_deliver_html_page($page_callback_result) {
  global $_boost;

  // Menu status constants are integers; page content is a string or array.
  if (is_int($page_callback_result)) {
    // @todo: Break these up into separate functions?
    switch ($page_callback_result) {

      // …

      case MENU_ACCESS_DENIED:
        // 403 page.
        $_boost['menu_item']['status'] = 403;
        break;

      // …

    }
    // …
  }
  // …   
}

এটি একটি বড় হ্যাক তবে এটি কাজ করে: আপনি যা করছেন তা হাইজ্যাকিং বলে। আপনি আপনার নিজস্ব কোডটি পূর্ববর্তী সময়ে প্লাগ করুন এবং তারপরে ন্যূনতম সংশোধন করে কোর কোডটি পুনরুত্পাদন করুন।
ফ্যাবিয়েন কোয়াটারভাক্স

10

ড্রুপাল 7-এ, ফাংশনটি যা ইতিমধ্যে সেট করা HTTP শিরোলেখগুলি দেয় তা হল drupal_get_http_header () , যার জন্য প্যারামিটার হিসাবে HTTP শিরোনামের নাম প্রয়োজন। এ খুঁজছি authorize_access_denied_page () , এবং drupal_fast_404 () কোড স্পষ্ট যা ফাংশন পাস মান করে তোলে।

  // authorize_access_denied_page()
  drupal_add_http_header('Status', '403 Forbidden');
  watchdog('access denied', 'authorize.php', NULL, WATCHDOG_WARNING);
  drupal_set_title('Access denied');
  return t('You are not allowed to access this page.');
// drupal_fast_404()
if ($fast_paths && preg_match($fast_paths, $_GET['q'])) {
  drupal_add_http_header('Status', '404 Not Found');
  $fast_404_html = variable_get('404_fast_html', '<html xmlns="http://www.w3.org/1999/xhtml"><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL "@path" was not found on this server.</p></body></html>');
  // Replace @path in the variable with the page path.
  print strtr($fast_404_html, array('@path' => check_plain(request_uri())));
  exit;
}

"স্থিতি" শিরোনাম যখন 403 দিয়ে শুরু হয় , তখন ড্রুপাল আউটপুট একটি অ্যাক্সেস অস্বীকার করে।

drupal_get_http_header('Status')দেরি হওয়ার জন্য কলটি নিশ্চিত করুন । কল করার সময় hook_init()খুব শীঘ্রই, তবে এটির সময় কল করা hook_page_alter()(বা কোনও থিম প্রিপ্রোসেস হুক) আপডেট হওয়া শিরোনামের তথ্য থাকবে।


এই এক সত্যিই ভাল উত্তর। তবে কেবল একটি পয়েন্ট লক্ষ্য করুন: পৃষ্ঠাটি ক্যাশে করা না হলে কেবল এটিই কাজ করবে বলে মনে হয়। যদি পৃষ্ঠাটি ইতিমধ্যে অ্যাক্সেস করা হয়ে থাকে তবে drupal_get_http_header('Status')রিটার্ন দেয় NULL
ফ্যাবিয়েন কোয়াটারভাক্স

4

আপনার মডিউল " Default 403 (access denied) page" পৃষ্ঠাটি " Administer > Site configuration > Error reporting" দ্বারা সংশোধিত " " এর মানটিকে বাধা দিতে পারে :

  1. ইন hook_enableব্যবহার variable_get/ variable_set, বিদ্যমান মান অনুলিপি করুন সেকেন্ডারি পরিবর্তনশীল প্রয়োজন এবং আপনার নিজের দ্বারা পরিবর্তনশীল প্রতিস্থাপন পথ (যা আপনি ব্যবহার নিবন্ধিত hook_menu)।

  2. hook_form_FORM_ID_alterমাধ্যমিক ভেরিয়েবল থেকে / লিখতে ব্যবহার করে "ত্রুটি প্রতিবেদনকরণ" ফর্মটি পরিবর্তন করুন

  3. আপনি যদি ব্যবহারকারীর কাছে সম্পূর্ণ অদৃশ্য হতে চান তবে আপনার পৃষ্ঠা কলব্যাক কল করতে পারে drupal_goto( the_value_of_the_secondary_variable )

  4. ইন hook_disable, গৌণ ভেরিয়েবল থেকে মানটি পুনরুদ্ধার করুন


এবং এটি হ'ল, "অ্যাক্সেস অস্বীকার" ট্রিগার করা হলে আপনার মডিউলটি একটি পরিষ্কার উপায়ে (এবং ব্যবহারকারীর কাছে অদৃশ্য) অবহিত হয়


2

অবশ্যই আপনি পিএইচপি এর get_headers()ফাংশন ব্যবহার করতে পারে ?

http://php.net/manual/en/function.get-headers.php

অ্যারেতে ফিরে আসা প্রথম উপাদানটি প্রতিক্রিয়া কোড হবে। যদি এতে '403' থাকে তবে দ্রুপাল একটি "অ্যাক্সেস প্রত্যাখ্যান" পৃষ্ঠা ফিরিয়ে দিয়েছেন।

আমি নিশ্চিত নই যে এটি কল করার সবচেয়ে ভাল জায়গাটি কোথায় হবে। hook_exit()আপনার প্রয়োজনের উপর নির্ভর করে সম্ভবত :

http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_exit/6


2

ড্রপাল 7 এ অ্যাক্সেস অস্বীকৃত (403) এবং পৃষ্ঠা পাওয়া যায়নি (404) সনাক্ত করার এটি সহজতম উপায়।

// get the menu router item for the current page
$router_item = menu_get_item();

// if there is no router item, this page is not found
$is_page_not_found_404 = empty($router_item);

// if 'access' is empty for the router item, access is denied
$is_access_denied_403 = empty($router_item['access']);

-2

আপনি এটির জন্য প্যানেল মডিউলটি ব্যবহার করতে পারেন ।

প্যানেল মডিউলটি কোনও সাইট প্রশাসককে একাধিক ব্যবহারের জন্য কাস্টমাইজড লেআউটগুলি তৈরি করতে দেয়। এর মূল অংশে এটি একটি টানা এবং ড্রপ কন্টেন্ট ম্যানেজার যা আপনাকে দৃষ্টিগোচরভাবে একটি বিন্যাস ডিজাইন করতে এবং সেই বিন্যাসের মধ্যে সামগ্রী রাখতে দেয়। অন্যান্য সিস্টেমের সাথে সংহতকরণ আপনাকে এটি ব্যবহার করে এমন নোড তৈরি করতে, ল্যান্ডিং পৃষ্ঠাগুলি যা এটি ব্যবহার করে এবং এমনকি ট্যাক্সোনমি এবং নোড পৃষ্ঠার মতো সিস্টেম পৃষ্ঠাগুলিকে ওভাররাইড করে যাতে আপনি খুব সূক্ষ্ম দানাদার অনুমতি নিয়ে আপনার সাইটের বিন্যাসটি কাস্টমাইজ করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.