كيف يمكنني التحقق مما إذا كان للمستخدم دور معين؟
لقد وجدت هذا ولكنها لـ Drupal 6.
نظرًا لأنك وجدت بالفعل تلك المشاركة ، فتأكد من قراءة التعليقات أيضًا. يشرح بوضوح سبب التوصية بالتحقق من الإذن على التحقق من الدور. عند استخدام الأذونات ، يمكنك تعيين هذا الإذن لأدوار متعددة ، مما يجعل نظامك أكثر مرونة. تذكر أيضًا أنه يمكن إعادة تسمية الأدوار ، مما يؤدي إلى كسر التعليمات البرمجية الخاصة بك.
ومع ذلك ، إذا كنت تريد التحقق من وجود دور ، فيمكنك القيام بذلك:
// 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
}
للتحقق مما إذا كان للمستخدم الحالي دور واحد أو أي من الأدوار المتعددة ، فإن الطريقة الرائعة هي القيام بما يلي:
//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
}
تحديث للإصدار Drupal> = 7.36
يمكنك استخدام الوظيفة user_has_role من Drupal API https://api.drupal.org/api/drupal/modules٪21user٪21user.module/function/user_has_role/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...
}
}
?>
يمكنك تثبيت وحدة devel والقيام بـ dpm ($ user). سيؤدي هذا إلى طباعة صفيف يحتوي على كافة معلومات المستخدم بما في ذلك دور المستخدم.
من هذا الصفيف ، يمكنك العثور على موضع الصفيف لـ "الأدوار" واستخدامه في الوحدة النمطية الخاصة بك للعثور على دور المستخدم.
لكي تكون مستقبليًا في حالة تغير اسم الدور ، من الأفضل التحقق من معرف الدور (التخلص) الذي يمكن العثور عليه في جدول الدور في قاعدة البيانات.
إذا كنت تريد التحقق من وجود دور مع التخلص 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
}
إليك الشفرة الفعلية من التعليق المشار إليها في الإجابة المقبولة على أنها أفضل ممارسة
<?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!
}
}
?>
يمكنك التحقق من دور المستخدم عن طريق print_r ($ user) وفي الإخراج ستحصل على شيء مثل هذا
stdClass Object ( [uid] => 0 [hostname] => :: 1 [role] => Array ( [1] => مستخدم مجهول // دور المستخدم الحالي غير معروف في حالتك قد يكون مختلفًا )
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}
للتحقق مما إذا كان للمستخدم دور معين:
function test_role(){
global $user;
if(isset($user->roles['my_role'])){
return true;
}
else {
return false;
}
}
فوق الإجابات لم تنجح ، الطريق غير متأكد ، لقد وجدت هذا مشاركة ويجب أن يكون الرمز `
// تحقق لمعرفة ما إذا كان $ user لديه دور المسؤول. if (in_array ('administrator'، array_values ($ user-> الأدوار))) {// افعل شيئًا. }؟> `