Bagaimana cara menetapkan izin untuk peran secara terprogram?

26

Saya memiliki beberapa izin yang ingin saya tetapkan untuk beberapa peran secara terprogram agar instalasi lebih mudah.

Karena saya menginstal modul dan membuat izin dan peran, saya tidak memiliki id peran, di mana saya ingin mengatur izin. Sejauh ini saya hanya menemukan cara untuk menetapkan peran secara terprogram yang membutuhkan ID peran.

Saya ingin tahu apakah saya bisa mencari peran dengan nama mereka (string), mengambil ID peran dan kemudian memberikan izin. Rasanya tidak benar.

vogelsang
sumber
Tabel izin menggunakan ID peran, bukan nama peran. Anda perlu mendapatkan ID peran, dan kemudian menambahkan izin menggunakan ID itu. Tabel izin kemudian membutuhkan string untuk izin, dan nama modul yang mengimplementasikannya (setidaknya pada Drupal 7); Saya tidak yakin apakah nama modul benar-benar digunakan dengan cara apa pun.
kiamlaluno
Adakah sesuatu yang spesifik yang tidak Anda mengerti tentang kode yang harus Anda gunakan? Kode apa yang Anda gunakan? Menampilkan kode Anda akan bermanfaat; itu akan membantu siapa yang menjawab untuk menyarankan apa yang perlu Anda lakukan (misalnya melaporkan apa yang salah dalam kode Anda).
kiamlaluno
Terima kasih atas jawabannya. Saya pikir saya harus mencari ID dalam database. Seharusnya tidak terlalu sulit.
vogelsang

Jawaban:

1

Modul fitur melakukan ini dengan cukup baik, memungkinkan Anda untuk mengekspor peran dan izin (dan banyak hal lainnya) dalam satu gerakan:

http://drupal.org/project/features

Tetapi jika Anda ingin meluncurkan sendiri API Izin Anda:

http://drupal.org/project/permissions_api

Krucucas
sumber
2
Masalahnya adalah Anda tidak tahu id peran ketika Anda menggunakan fitur karena mereka ditugaskan ketika Anda menginstal fitur Anda. Karena itu, Anda perlu menemukan ID entah bagaimana untuk menetapkan izin. Mungkin hanya pencarian di database.
vogelsang
24

Fiturnya cukup berguna untuk hal-hal seperti ini. Namun, jika Anda memang perlu membuat peran dan menambahkan izin secara program, Anda tidak perlu menggali sendiri melalui database.

Saat Anda membuat peran pengguna baru user_role_save(), itu akan memperbarui objek yang Anda berikan dengan id peran pengguna baru yang ditugaskan. Anda dapat melihat contohnya dalam standard_install()fungsi ini di profil pemasangan Standar.

$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')));

Contoh ini menunjukkan bahwa Anda dapat membuat peran pengguna baru, lalu mengakses ridpropertinya, yang diisi oleh user_role_save(). Ini juga menunjukkan bagaimana cara menambahkan izin ke peran itu user_role_grant_permissions(). Dalam hal ini, ini memberikan peran 'administrator' semua izin yang tersedia.

Jika Anda perlu mendapatkan id dari peran pengguna yang dibuat oleh orang lain, Anda bisa menggunakan user_role_load_by_name()untuk mendapatkan objek untuk peran pengguna itu. Maka Anda hanya mengambil id dengan $role->rid.

Chaulky
sumber
2
Ini bagus untuk memberikan / mencabut banyak izin sekaligus: api.drupal.org/api/drupal/modules%21user%21user.module/function/…
Brian Wood
20

Saya ingin menambahkan contoh kode yang lebih dekat ke pertanyaan awal tentang cara menetapkan izin ke peran yang ada secara terprogram.

Anda dapat mencari peran dengan namanya, mengambil ID peran dan kemudian menetapkan izin sebagai berikut (misalnya dalam implementasi 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);
  }
}
batigolix
sumber