আমি কীভাবে অনুমতিগুলি ডিবাগ করব?


36

ড্রুপাল 7 এ আমি কীভাবে অনুমতিগুলি ডিবাগ করব?

আমি কোর রিপোর্টিং, ত্রুটি লগগুলি, ডিভেল মডিউল ত্রুটি লগগুলি, ব্যাকট্রেস এবং নোড অ্যাক্সেস অনুমতি ব্লক ব্যবহার করি তবে কখনও কখনও এটি পর্যাপ্ত হয় না। নির্দিষ্ট ক্ষেত্র, দর্শন বা ব্লক কোনও ব্যবহারকারীর কাছে কেন প্রদর্শিত হচ্ছে না তা জানতে আমার আর কী পরীক্ষা করা উচিত?

আমি আরও জানতে পেরেছি যে ড্রুপাল for এর জন্য মডিউল রয়েছে যার জন্য ডেকে নেওয়া অনুমতিগুলির প্রতিবেদন করার জন্য তবে এটি দ্রুপাল for এর জন্য উপলভ্য নয়।

আমি তৃতীয় পক্ষ সম্পর্কিত বিভিন্ন অনুমতি সম্পর্কিত মডিউল ব্যবহার করছি:

 - devel node access 7.x-1.x-dev 
 - fast permissions administration 7.x-2.0
 - organic groups access control 7.x-1.x 
 - profile2 group access 7.x-1.x-dev 
 - ur-node access 7.x-1.x-dev

এটি আপনার প্রশ্নের একটি গুরুত্বপূর্ণ অংশ হতে পারে: আপনি কি কোনও অবদান বা কাস্টম নোড অ্যাক্সেস মডিউলগুলি ব্যবহার করছেন, যেমন নোড_একসেস ?
অপেশাদার বড়িস্তা

স্বরে নোট করুন: নোড_একসেস ডি 7 তে কেবল ডি 6 তে উপলভ্য নয়। তবে এতে জড়িত অন্যান্য অনুমতি মডিউল থাকতে পারে।
অপেশাদার বারিস্তা

@ মতেউরবারিস্তা হ্যাঁ, আমি PS2 তে উল্লিখিত হিসাবে অনুমতি মডিউলগুলি ব্যবহার করছি।
রেফিনিও

ফিল্টার_প্রেমস মডিউলটি উপরে বর্ণিত অনুমতি_বন্দরের মডিউলের একটি দ্রুপাল -7 সমতুল্য
দ্রুভিশন

উত্তর:


21

আপনি যে উপায়টি করতে পারেন তা হ'ল প্রতিটি পৃষ্ঠা, প্রতিটি নোড, প্রতিটি ব্লকে একটি কাস্টম মডিউল তৈরি করতে হবে access

মেনু_সেট_াইটেম () ফাংশনটি এমন রাউটার আইটেমটি ফিরিয়ে দেয় যা বর্তমান পৃষ্ঠার জন্য অ্যাক্সেস_আরগমেন্টস সম্পত্তি রয়েছে।

/**
 * Show access permission of current page.
 */
function yourmodule_get_page_access() {

  $router_item = menu_get_item();
  if ($router_item) {

    $access_arguments = unserialize($router_item['access_arguments']);

    $arguments = array();
    foreach ($access_arguments as $access_argument) {
      $arguments[] = $access_argument;
    }
    if ($arguments) {
      $output  = '<p>';
      $output .= t('This page needs user to have %p permission(s) to access', array(
        '%p' => implode(', ', $arguments),
      ));
      $output .= '</p>';
    }
    else {
      $output = '<p>' . t('This page needs no user permissions') . ' </p>';
    }
    return $output;
  }
}

তারপরে আপনি প্রতিটি পৃষ্ঠার উপরে অ্যাক্সেসের তথ্য প্রদর্শন করতে, হুক_পেজ_ল্টারটি করতে পারেন।

/**
 * Implements hook_page_alter().
 *
 * Display access information on top of every page.
 */
function yourmodule_page_alter(&$page) {

  // Make a new area on top of the page for displaying access information.
  $page['content']['theverytop']['#markup'] = yourmodule_get_page_access();
  $page['content']['theverytop']['#weight'] = -10;
  $page['content']['#sorted'] = FALSE;
}

পরবর্তী আপনি এই জাতীয় ব্লক অনুমতি সম্পর্কিত তথ্য প্রদর্শন করতে পারেন:

/**
 * Implement hook_block_alter
 *
 * To display block permission information to the block title.
 */

function yourmodule_block_view_alter(&$data, $block) {
  $delta = $block->delta;
  $output = '';

  $rid = db_query("SELECT rid FROM {block_role} WHERE delta = :delta", array(':delta' => $delta))->fetchCol();

  if (empty($rid)) {
      $output = ' This block does not have any role permission restriction.';
  } else {
      $output = ' This block is viewable for users have role(s): ';
      foreach ($rid as $role_id) {
          $rolename = db_query("SELECT name from {role} where rid = :rid", array(':rid' => $role_id))->fetchField();
          $output .= $rolename . ' ';
      }
  }

  // append the permission info to block title for every block
  $block->title .= $output;
}

এবং তাই, মূলত একই ধারণা, আপনি নোড, ফর্ম, মতামত একই কাজ করতে পারেন। আশাকরি এটা সাহায্য করবে.


অ্যাক্সেস আর্গুমেন্টগুলি যখন yourmodule_get_page_access()কোনও অর্থহীন করে না, $router_item['access_callback']তখন আপনি সেখানে কী ঘটছে তা খতিয়ে দেখতে প্রাসঙ্গিক মডিউলগুলিতে সেই নামটি সহ ফাংশনটি সন্ধান করতে পারেন। দুর্দান্ত উত্তর।
ওয়াটওয়ার

7

ব্যবহারকারী মডিউল প্রধান ফাইল সম্পাদনা করুন; এটি user_access(), ফাংশন সামনে 2 লাইন যোগ returnবিবৃতি, এবং পিএইচপি ত্রুটি লগ সবসময় নজর রাখি।

$granted = isset($perm[$account->uid][$string]);
error_log(sprintf('--- user_access: %s "%s" = %s', $account->name, $string, $granted ? 'yes' : 'no'));
return isset($perm[$account->uid][$string]);

এটি আসলে বেশ ভাল। ডিবাগ ফিল্ড অনুমতি সম্পর্কে কীভাবে?
মিশাল প্রিজিবিলোইক্জ

আমি ড্রাশে মানগুলি দেখতে পাচ্ছি, তবে ব্যবহারকারীরা কে তা জানেন না dr তবে এটি হুক_মেনুতে সংজ্ঞায়িত পৃষ্ঠায় প্রদর্শিত হচ্ছে না। অনিশ্চিত কেন।
sam452

error_logস্ক্রিনে আউটপুট দেয় না। আমার ইনস্টলেশনের জন্য, এটি অ্যাপাচি ত্রুটি লগতে লিখেছিল। php.net/manual/en/function.error-log.php
রাইয়ের

5

দেখে মনে হচ্ছে আপনি ইতিমধ্যে সমস্ত GUI- ভিত্তিক সরঞ্জামগুলির অনুমতি সমাধানের জন্য পেয়েছেন। অতীতে কার্যকরভাবে ব্যবহৃত একটি আরও উন্নত (এবং সম্ভবত আরও কঠিন) কৌশলটি হ'ল:

  1. ক্ষেত্রগুলি, ভূমিকা, নোড-প্রকার ইত্যাদির সাথে একটি ভিউ তৈরি করুন যা আমি পরীক্ষা করতে চাই।
  2. দর্শন উন্নত বিকল্পগুলির পৃষ্ঠায় "ডিসপ্লে ক্যোয়ারী" সক্ষম করুন।
  3. ভিউ এক্সিকিউট করুন এবং এসকিউএল কোয়েরিটিকে জিইউআই-ভিত্তিক এসকিউএল সম্পাদক যেমন নাভিচ্যাট (বাণিজ্যিক) বা মাইএসকিউএল ওয়ার্কবেঞ্চ (ফ্রি) এ আটকান।
  4. নোডগুলি কী দেখায় না তা দেখুন।
  5. আপনার প্রয়োজন অনুসারে ক্যোয়ারীটি স্নাতক করুন।

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


2

দ্রুপাল সহ আমাকে কিছু সময় একটি ডিবাগার ব্যবহার করতে হবে (নেটবিয়ান সহ এক্সডিবিগ)। কেবলমাত্র কোড পড়ার মাধ্যমে, ব্যাকট্র্যাস প্রিন্ট করে বা চূড়ান্ত আউটপুট পরীক্ষা করে বিশ্বব্যাপী যা যুক্ত হয় তা অনুসরণ করতে পরোক্ষভাবে প্রচুর ফাংশন বলা হয়।

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