ฉันจะค้นหา ID บทบาทจากชื่อบทบาทได้อย่างไร


17

เมื่อเข้าสู่ระบบฉันต้องการตรวจสอบแหล่งข้อมูลบุคคลที่สาม (ตารางในฐานข้อมูล) สำหรับผู้ใช้และหากพบว่าฉันต้องการเพิ่มบทบาทให้กับผู้ใช้นั้น

ฉันไม่ต้องการที่จะคาดเดาการกำจัดของบทบาทฉันต้องการที่จะได้รับจากชื่อบทบาท

คำตอบ:


20

ตรงไปตรงมามากกับuser_roles ()และarray_search () ด้านล่างเป็นฟังก์ชั่นที่จะคืนค่า ID บทบาทหากมีบทบาทที่ตรงกับชื่อและ FALSE

function get_role_by_name($name) {
  $roles = user_roles();
  return array_search($name, $roles);
}

// Sample usage
$rid = get_role_by_name('administrator');

หนึ่งซับจะเป็น:

$rid = array_search('administrator', user_roles());

1
แบบสอบถามที่ดำเนินการโดยuser_roles ()ถูกแท็กแปลได้ซึ่งหมายความว่าโมดูลสามารถแปลชื่อบทบาทได้ Drupal แปลชื่อบทบาทสำหรับบทบาทเริ่มต้นเท่านั้น (เช่นผู้ใช้ที่ไม่ระบุชื่อและผู้ใช้ที่ได้รับการรับรองความถูกต้อง)
kiamlaluno

32

user_role_load_by_name()รู้ชื่อเครื่องของบทบาทมันก็เพียงพอที่จะใช้งาน

if ($role = user_role_load_by_name('Role Name')) {
  // The role ID is in $role->rid.
}

หากบทบาทอาจไม่มีอยู่ ...

$role = user_role_load_by_name('Role Name');

$role_id = $role ? $role->rid : NULL;

3
ฉันชอบวิธีนี้มากกว่าวิธีอื่นที่สามารถแปลชื่อบทบาทได้ ในความเป็นจริงแบบสอบถามที่ดำเนินการโดยuser_roles ()ถูกติดแท็กแปลได้ Drupal แปลเฉพาะชื่อสำหรับบทบาทเริ่มต้น แต่โมดูลสามารถแปลชื่อบทบาทอื่น ๆ ได้เช่นกัน
kiamlaluno

4
$ rid = ($ role = user_role_load_by_name ())? $ role-> กำจัด: NULL;
Pierre Buyle

-2

วิธีที่ดีที่สุดในการระบุบทบาทและ id ของมันมาจาก SQL เรียกใช้แบบสอบถามนี้ในตัวแก้ไข SQL ของคุณ

select * from roles;

และคุณจะได้รับรายชื่อบทบาทรวมถึงรหัสและน้ำหนัก


1
วิธีที่ดีที่สุดคือใช้ API ที่ Drupal จัดหาให้ การเข้าถึงฐานข้อมูลโดยตรงเมื่อมี API ไม่ใช่ความคิดที่ดีหรือวิธีที่ดีที่สุด
kiamlaluno

นี่เป็นวิธีที่ง่ายมากในการรับบทบาท! ฉันไม่แปลกใจเลยที่ Drupal Stack Exchange Police ให้คะแนนวิธีง่ายๆ
BlondeSwan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.