আমি কীভাবে প্রোগ্রামে কোনও ব্লকে অ্যাক্সেস বরাদ্দ করব?


10

আমি প্রোগ্রামক্রমে একটি ব্লক তৈরি করেছি তবে আমি জানি না কীভাবে আমি প্রোগ্রামটিমে এটিতে অ্যাক্সেস নির্ধারণ করতে পারি। আমি কীভাবে এটি অর্জন করতে পারি?


আপনি কি আপনার প্রশ্নটি প্রসারিত করতে এবং আপনার কোডটি প্রদর্শন করতে পারেন?
ত্রিস্কিলিয়ন

ব্লক কোডে নিজেই আপনি ব্যবহারকারীকে (গ্লোবাল $ ব্যবহারকারী) সন্ধান করতে পারেন এবং লিঙ্কে থাকা পদ্ধতিটি ব্যবহার করে তাদের ভূমিকাটি পরীক্ষা করতে পারেন। bywombats.com/blog/ryan/10-25-2007/…
ব্যবহারকারী 6614

প্যানেলগুলির মডিউলটিতে অঞ্চলগুলি ব্যবহার করে কিছু দুর্দান্ত অ্যাক্সেস নিয়ন্ত্রণ রয়েছে, ব্লকগুলি নয়।
লুই 18

উত্তর:


10

অ্যারে থেকে "রোলস" অ্যারেটি সেট করা hook_block_info()কাজ করে না কারণ:

  • যে ভূমিকাগুলি একটি ব্লক দেখার অনুমতি দেয় এবং যা ব্যবহারকারী ইন্টারফেসে সেট করা থাকে, "ব্লক_রোল" সারণীতে block_admin_configure_submit () থেকে সংরক্ষণ করা হয়

    $query = db_insert('block_role')->fields(array('rid', 'module', 'delta'));
    foreach (array_filter($form_state['values']['roles']) as $rid) {
      $query->values(array(
        'rid' => $rid,
        'module' => $form_state['values']['module'],
        'delta' => $form_state['values']['delta'],
      ));
    }
    $query->execute();
    
  • কোড সিদ্ধান্ত নেয় যা ব্লক বর্তমানে প্রদর্শন করা উচিত লগ-ইন ব্যবহারকারী মধ্যে অন্তর্ভুক্ত করা হয় block_block_list_alter () , এর একটি বাস্তবায়ন যা hook_block_list_alter () ব্যবহার শুধু তাই টেবিলের বিষয়বস্তু এবং

    $result = db_query('SELECT module, delta, rid FROM {block_role}');
    foreach ($result as $record) {
      $block_roles[$record->module][$record->delta][] = $record->rid;
    }
    
    foreach ($blocks as $key => $block) {
      if (!isset($block->theme) || !isset($block->status) || $block->theme != $theme_key || $block->status != 1) {
        // This block was added by a contrib module, leave it in the list.
        continue;
      }
    
      // If a block has no roles associated, it is displayed for every role.
      // For blocks with roles associated, if none of the user's roles matches
      // the settings from this block, remove it from the block list.
      if (isset($block_roles[$block->module][$block->delta]) && !array_intersect($block_roles[$block->module][$block->delta], array_keys($user->roles))) {
        // No match.
        unset($blocks[$key]);
        continue;
      }
    
      // …
    
    }
    
  • অন্য Drupal এর ফাংশন যা চেকের নয় ভূমিকা তথ্য থেকে ফিরে সম্পত্তি hook_block_info(), কিংবা কি থেকে প্রত্যাগত সাথে মার্জ "block_role" টেবিলের বিষয়বস্তু hook_block_info()বাস্তবায়নের।

আপনি যাচাই করতে পারবেন ব্যবহারকারীর ব্লকটি দেখতে প্রয়োজনীয় ভূমিকা রয়েছে hook_block_view(), তবে সেই সময়ে ড্রুপাল ইতিমধ্যে ব্লকটি সরবরাহ করছে; এর অর্থ ব্যবহারকারী ইতিমধ্যে একটি সেট করা থাকলে ব্লক শিরোনামটি দেখতে পাবেন।

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

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

স্ক্রিনশট

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


ভাল আমি অবশ্যই সবচেয়ে উপযুক্ত উত্তর হিসাবে এই এক সঙ্গে যেতে হবে। ধন্যবাদ বিশদ ব্যাখ্যার জন্য ধন্যবাদ কারণ এটি সত্যই বুঝতে সাহায্য করে যে ড্রুপাল ব্লকগুলি কীভাবে পর্দার আড়ালে কাজ করে।
ব্যবহারকারী 5013

1

আপনার হুক_ব্লক_ইনফোতে আপনি এর মতো কিছু চেষ্টা করতে পারেন:

$blocks['myblock'] = array(
   ...
   'roles' => array(
      'administrator' => '3',
      'authenticated user' => '2',
   )

এটি কোনও প্রোগ্রাম্যাটিক পদ্ধতির সাহায্যে এটি বাস্তবায়নের সর্বোত্তম উপায় বলে মনে হচ্ছে আপনি কোন ভূমিকাগুলির অ্যাক্সেস রয়েছে তা নির্ধারণ করেন এবং তারপরে কোনও ব্যবহারকারী এটি অ্যাক্সেস করতে পারবেন কিনা তা ড্রুপালকে নির্ধারণ করতে দিন। আমি এই পদ্ধতির কোনও খারাপ দিক মিস করেছি?
ব্যবহারকারী 5013

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

ব্যবহারের ক্ষেত্রে ব্যবহারকারীদের জন্য সেটআপটি স্বয়ংক্রিয়ভাবে করা হবে যাতে তাদের দরকার হয় না। কঠোরভাবে একটি সুবিধা সমস্যা। একবার সেট হয়ে গেলে তারা তাদের এটির প্রয়োজন অনুযায়ী এটি পরিবর্তন করতে পারে যদি এটি তাদের বিশেষ প্রয়োজনের সাথে খাপ না দেয়।
ব্যবহারকারী 5013

1
এটি কাজ করে না; আমার উত্তরটি কেন তা নয় তার জন্য দেখুন।
কিমলালুনো

0

ধরে নিই যে আপনি হুক_ব্লক_ইনফো () দিয়ে নিজেকে ব্লক তৈরি করছেন তবে আপনি কেবল আপনার হুক_ব্লক_ভিউ () ফাংশনে ইউজার_একসেস () করতে পারবেন। এপিআই ডক্স পরীক্ষা করে দেখুন যেহেতু এটির একটি উদাহরণ রয়েছে।


হ্যাঁ আমার ব্যবহারকারীর_অ্যাক্সেস ব্যবহার সম্পর্কে চিন্তা করা উচিত ছিল। পুরোপুরি আমার মন পিছলে গেল - ডিও। আমি ভূমিকা অ্যাক্সেস ব্যবহার করার বিষয়ে ভাবছি তবে সম্ভবত অনুমতি অ্যাক্সেসের আরও ভাল উপায় হতে পারে।
ব্যবহারকারী 5013

0

হুক_ব্লক_ইনফো () এ এটি অসম্ভব তবে আপনি এটি অর্জনের জন্য এই ক্যোয়ারীটি ব্যবহার করতে পারেন। MODULE_NAME, BLOCK_DELTA এবং RID অনুসারে পরিবর্তন করুন

$query = db_insert('block_role')
  ->fields(array(
    'module' => 'MODULE_NAME', 
    'delta' => 'BLOCK_DELTA', 
    'rid' => 2, // Authenticated User
  ))
  ->execute();

0

হুক_ব্লক_ভিউতে, আপনি global $userব্যবহারকারীর সম্পর্কে তথ্য পেতে ব্যবহার করতে পারেন , তারপরে ব্যবহারকারীর ভূমিকার উপর ভিত্তি করে আপনি ভিন্নরূপ নির্ধারণ করতে পারেন block['subject']এবং block['content']এমনকি যদি কোনও ভূমিকা বা অদৃশ্য হয়ে থাকে তবে কোনও বিষয়বস্তু এবং বিষয়বস্তু অবরুদ্ধ করতে পারবেন না। এখানে একটি উদাহরণ:

function ModuleNAME_block_view($delta = '') {
  switch ($delta) {
    case 'Your_BLOCK' :
      Global $user;
      if($user->uid != '0') {
        $block['subject'] = 'SUBJECT';
        $block['content'] = 'SOME CONTENT OR A FUNCTION FOR BLOCK';
      }
      break;
  }
  return $block;
}

এই কোডটি প্রমাণীকরণকারী ব্যবহারকারীদের (অতিথি নয়) ব্যবহারের ফলে অনুমোদনপ্রাপ্ত ব্যবহারকারীদের জন্য ব্লকটি দৃশ্যমান হয়ে উঠবে।

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