ฉันจะตรวจสอบว่าผู้ใช้มีบทบาทที่แน่นอนได้อย่างไร
ฉันพบสิ่งนี้แต่มันมีไว้สำหรับ Drupal 6
ฉันจะตรวจสอบว่าผู้ใช้มีบทบาทที่แน่นอนได้อย่างไร
ฉันพบสิ่งนี้แต่มันมีไว้สำหรับ 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) สิ่งนี้จะพิมพ์อาร์เรย์ที่มีข้อมูลผู้ใช้ทั้งหมดรวมถึงบทบาทผู้ใช้
จากอาเรย์นี้คุณสามารถค้นหาตำแหน่งอาเรย์ของ "บทบาท" และใช้มันในโมดูลของคุณเพื่อค้นหาบทบาทผู้ใช้
การเป็น Futureproof ในกรณีที่ชื่อบทบาทเปลี่ยนเป็นการดีที่สุดที่จะตรวจสอบ ID บทบาท (กำจัด) ซึ่งสามารถพบได้ในตารางบทบาทในฐานข้อมูล
หากคุณต้องการตรวจสอบบทบาทที่มีการกำจัด 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 ( [uid] => 0 [hostname] => :: 1 [role] => Array ( [1] => ผู้ใช้ที่ไม่ระบุชื่อ // การกำหนดบทบาทผู้ใช้ปัจจุบันไม่ระบุชื่อในกรณีของคุณมันอาจแตกต่างกัน )
เพื่อตรวจสอบว่าผู้ใช้มีบทบาทที่แน่นอน:
function test_role(){
global $user;
if(isset($user->roles['my_role'])){
return true;
}
else {
return false;
}
}
global $user;
$roleid = 123; //
if(user_has_role($roleid, $user)) {
//yes this user has this role
}
คำตอบข้างต้นไม่ได้ผลไม่แน่ใจฉันพบโพสต์นี้และรหัสควรเป็น `
// ตรวจสอบเพื่อดูว่าผู้ใช้ $ มีบทบาทผู้ดูแลระบบหรือไม่ if (in_array ('administrator', array_values ($ user-> role))) {// ทำอะไรบางอย่าง }?> `