ব্যবহারকারীর ভূমিকা আছে কিনা তা পরীক্ষা করুন


46

কোনও ব্যবহারকারীর নির্দিষ্ট ভূমিকা আছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?

আমি দেখেছি এই কিন্তু এটি Drupal এর 6 জন্য।

উত্তর:


87

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

এটি বলেছে, আপনি যদি কোনও ভূমিকা পরীক্ষা করতে চান তবে আপনি এটি করতে পারেন:

// Load the currently logged in user.
global $user;

// Check if the user has the 'editor' role.
if (in_array('editor', $user->roles)) {
  // do fancy stuff
}

1
আমি যদি 1 টির বেশি ভূমিকা দেখতে চাই তবে কী হবে। উদাহরণস্বরূপ যদি অভিনব জিনিসগুলির চেয়ে "সম্পাদক" বা "প্রকাশক" হন। কোড কিভাবে। প্লস পরামর্শ। সত্যিই বুঝতে পারছি না।
অ্যাডামটান

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

11

বর্তমান ব্যবহারকারীর একক ভূমিকা বা একাধিক ভূমিকা রয়েছে কিনা তা যাচাই করতে একটি দুর্দান্ত উপায় হ'ল:

//can be used in access callback too
function user_has_role($roles) {
    //checks if user has role/roles
    return !!count(array_intersect(is_array($roles)? $roles : array($roles), array_values($GLOBALS['user']->roles)));
};

if (user_has_role(array('moderator', 'administrator'))) {
  // $user is admin or moderator
} else if(user_has_role('tester')){
  // $user is tester
} else{
  // $user is not admin and not moderator
}

9

ড্রুপাল সংস্করণ> = 7.36 এর জন্য আপডেট

আপনি Drupal API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_rol/7 থেকে ফাংশন ব্যবহারকারী_হাস_রোল ব্যবহার করতে পারেন ।

এই উদাহরণটি ব্যবহার করে দেখুন:

<?php
function MYMODULE_foo() {
  $role = user_role_load_by_name('Author');
  if (user_has_role($role->rid)) {
    // Code if user has 'Author' role...
  }
  else {
    // Code if user doesn't have 'Author' role...
  }

  $user = user_load(123);

  if(user_has_role($role->rid, $user)) {
    // Code if user has 'Author' role...
  }
  else {
    // Code if user doesn't have 'Author' role...
  }
}
?>

2

আপনি ডিভেল মডিউলটি ইনস্টল করতে এবং ডিপিএম করতে পারেন ($ ব্যবহারকারী)। এটি ব্যবহারকারীর ভূমিকা সহ সমস্ত ব্যবহারকারীর তথ্য সহ একটি অ্যারে মুদ্রণ করবে।

এই অ্যারে থেকে আপনি "ভূমিকা" এর অ্যারে অবস্থানটি খুঁজে পেতে এবং ব্যবহারকারীর ভূমিকা খুঁজতে এটি আপনার মডিউলটিতে ব্যবহার করতে পারেন।


বিকাশের অধীনে-> পিএইচপি কোডটি কার্যকর করুন, প্রবেশ করুন: গ্লোবাল $ ব্যবহারকারী; dpm ($ ব্যবহারকারী);
ডায়মন্ডিয়া

1

ভূমিকা নাম পরিবর্তিত হওয়ার ক্ষেত্রে ভবিষ্যতের প্রতিরোধী হওয়ার জন্য ডাটাবেসে রোল টেবিলের মধ্যে পাওয়া যায় এমন ভূমিকা আইডি (মুক্তি) অনুসন্ধান করা ভাল।

আপনি যদি মুক্তি 16 দিয়ে কোনও ভূমিকা জানতে চান, তা করুন:

// Load the currently logged in user.
global $user;

// Check if the user has the 'editor' role, when 'editor' has role id 16
if (array_key_exists(16, $user->roles)) {
  // do fancy stuff
}

1
প্রকৃতপক্ষে, আপনি যখন ভূমিকার মতো জিনিসগুলি মাইগ্রেট করেন, তখন মেশিনের নাম সম্ভবত রাখা হবে এবং আইডি থাকবে না
মওট

রোল টেবিলটিতে কোনও মেশিনের নাম নেই কেবল একটি মুক্তি এবং একটি মানবিক নাম। ব্যবহারকারী_রোলেস সারণী একটি ইউডকে একটি মুক্তির জন্য নির্ধারণ করে।
হ্যান্স রোসেল

1

গৃহীত উত্তরে সেরা অনুশীলন হিসাবে উল্লেখ করা মন্তব্যটির আসল কোডটি এখানে

<?php
  function mymodule_perm() {
    return array('access something special');
  }

  function dosomethingspecial() {
    // For current user
    if (user_access('access something special')) {
      // Doing something special!
    }

    // For a specific user
    if (user_access('access something special', $theuser)) {
      // Doing something special!
    }
  }
?>

0

আপনি মুদ্রণ_আর ($ ব্যবহারকারী) দ্বারা কোনও ব্যবহারকারীর ভূমিকা পরীক্ষা করতে পারেন এবং আউটপুটে আপনি এর মতো কিছু পাবেন

stdClass অবজেক্ট
(
    [uid] => 0
    [হোস্টনাম] => :: ১
    [ভূমিকা] => অ্যারে
        (
            [1] => বেনামী ব্যবহারকারী // বর্তমান ব্যবহারকারীর ভূমিকা আমার বেনামে আপনার ক্ষেত্রে এটি ভিন্ন হতে পারে
        )

0

ব্যবহারকারীর একটি নির্দিষ্ট ভূমিকা আছে কিনা তা পরীক্ষা করতে:

function test_role(){
   global $user;
   if(isset($user->roles['my_role'])){
     return true;
   }
   else {
    return false;
 }
}


0

উপরের উত্তরগুলি কার্যকর হয়নি, নিশ্চিত উপায় নয়, আমি খুঁজে পেয়েছি যে এই পোস্ট এবং কোডটি found হওয়া উচিত `

// $ ব্যবহারকারীর প্রশাসকের ভূমিকা আছে কিনা তা পরীক্ষা করে দেখুন। যদি (ইন_আররে ('প্রশাসক', অ্যারে_ভ্যালু ($ ব্যবহারকারী-> ভূমিকা))) {// কিছু করুন। }?> `

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