วิธีการกำหนดสิทธิ์ให้กับบทบาททางโปรแกรมหรือไม่


26

ฉันมีสิทธิ์บางอย่างที่ฉันต้องการมอบหมายให้กับบางบทบาทโดยทางโปรแกรมเพื่อการติดตั้งที่ง่ายขึ้น

เนื่องจากฉันกำลังติดตั้งโมดูลและสร้างทั้งสิทธิ์และบทบาทฉันไม่มีรหัสบทบาทที่ฉันต้องการตั้งค่าการอนุญาต จนถึงตอนนี้ฉันพบวิธีการกำหนดบทบาทโดยทางโปรแกรมซึ่งต้องมี ID บทบาทเท่านั้น

ฉันสงสัยว่าฉันสามารถค้นหาบทบาทด้วยชื่อของพวกเขา (สตริง) เรียก ID บทบาทแล้วกำหนดสิทธิ์ มันรู้สึกไม่ถูกต้อง


ตารางสิทธิ์ใช้ ID บทบาทไม่ใช่ชื่อบทบาท คุณต้องได้รับ ID บทบาทแล้วจึงเพิ่มสิทธิ์โดยใช้ ID นั้น ตารางสิทธิ์จะต้องมีสตริงสำหรับการอนุญาตและชื่อของโมดูลที่ใช้มัน (อย่างน้อยใน Drupal 7) ฉันไม่แน่ใจว่าชื่อโมดูลนั้นถูกใช้จริงหรือไม่
kiamlaluno

มีอะไรพิเศษที่คุณไม่เข้าใจเกี่ยวกับรหัสที่คุณควรใช้หรือไม่ คุณใช้รหัสอะไร การแสดงรหัสของคุณจะเป็นประโยชน์ มันจะช่วยให้ใครตอบเพื่อแนะนำสิ่งที่คุณต้องทำ (เช่นการรายงานสิ่งที่ผิดในรหัสของคุณ)
kiamlaluno

ขอบคุณสำหรับคำตอบ. ฉันคิดว่าฉันต้องค้นหา ID ในฐานข้อมูล ไม่ควรยากขนาดนั้น
vogelsang

คำตอบ:


1

โมดุลคุณสมบัติทำสิ่งนี้ได้เป็นอย่างดีช่วยให้คุณสามารถส่งออกบทบาทและการอนุญาต (และอื่น ๆ อีกมากมาย) ได้ในคราวเดียว:

http://drupal.org/project/features

แต่ถ้าคุณต้องการเปิดใช้งานการอนุญาต API ของคุณ:

http://drupal.org/project/permissions_api


2
ปัญหาคือคุณไม่ทราบ ID บทบาทเมื่อคุณใช้คุณสมบัติเนื่องจากมีการกำหนดเมื่อคุณติดตั้งคุณสมบัติของคุณ ดังนั้นคุณต้องค้นหา ID เพื่อกำหนดสิทธิ์ อาจเป็นเพียงการค้นหาในฐานข้อมูล
vogelsang

24

คุณสมบัติมีประโยชน์สำหรับสิ่งนี้ อย่างไรก็ตามหากคุณจำเป็นต้องสร้างบทบาทและเพิ่มสิทธิ์โดยทางโปรแกรมคุณไม่จำเป็นต้องขุดผ่านฐานข้อมูลด้วยตัวเอง

เมื่อคุณสร้างบทบาทผู้ใช้ใหม่ด้วยuser_role_save()มันจะอัปเดตวัตถุที่คุณส่งผ่านด้วย ID บทบาทผู้ใช้ใหม่ที่ได้รับมอบหมาย คุณสามารถดูตัวอย่างนี้ได้ในstandard_install()ฟังก์ชั่นในโปรไฟล์การติดตั้งมาตรฐาน

$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));

ตัวอย่างนี้แสดงให้เห็นว่าคุณสามารถสร้างบทบาทของผู้ใช้ใหม่แล้วเข้าถึงของทรัพย์สินซึ่งก็เต็มไปด้วยrid นอกจากนี้ยังแสดงให้เห็นถึงวิธีการเพิ่มสิทธิ์ที่จะมีบทบาทที่มีuser_role_save() user_role_grant_permissions()ในกรณีนี้เป็นการอนุญาตบทบาทผู้ดูแลระบบที่มีอยู่ทั้งหมด

หากคุณต้องการรับ ID ของบทบาทผู้ใช้ที่สร้างโดยบุคคลอื่นคุณสามารถใช้user_role_load_by_name()เพื่อรับวัตถุสำหรับบทบาทผู้ใช้นั้น $role->ridแล้วคุณก็คว้าประชาชนด้วย


2
นี่เป็นสิ่งที่ดีสำหรับการอนุญาต / เพิกถอนการอนุญาตหลายรายการพร้อมกัน: api.drupal.org/api/drupal/modules%21user%21user.module/function/…
Brian Wood


20

ฉันต้องการเพิ่มตัวอย่างรหัสที่ใกล้เคียงกับคำถามเดิมเกี่ยวกับวิธีการกำหนดสิทธิ์ให้กับบทบาทที่มีอยู่โดยทางโปรแกรม

คุณสามารถค้นหาบทบาทด้วยชื่อเรียก ID บทบาทและจากนั้นกำหนดสิทธิ์ดังต่อไปนี้ (ตัวอย่างเช่นในการใช้งาน hook_update):

function custommodule_update_7001() {
  $permissions = array('view my custom entity');
  foreach(array('anonymous user', 'authenticated user') as $role_name) {
    $role = user_role_load_by_name($role_name);
    user_role_grant_permissions($role->rid, $permissions);
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.