Rollere programlı olarak nasıl izin verilir?


26

Daha kolay kurulum için programatik olarak bazı rollere atamak istediğim bazı izinlerim var.

Modülü kurduğum ve hem izin hem de rol oluşturduğum için izinleri ayarlamak istediğim rol kimlikleri yok. Şimdiye kadar yalnızca rol kimliğine ihtiyaç duyan programlı rolleri atamanın yollarını buldum .

Acaba bir şekilde rolleri isimleriyle (dize) arayabilir miyim, rol kimliğini alabilir miyim ve daha sonra izin atayabilir miyim? Sadece doğru gelmiyor.


İzin tablosu, rol adını değil rol kimliğini kullanır. Rol kimliğini almanız ve ardından bu kimliği kullanarak izni eklemeniz gerekir. İzin tablosu daha sonra izin için dizeye ve onu uygulayan modülün adına ihtiyaç duyar (en azından Drupal 7'de); Modül adının gerçekten herhangi bir şekilde kullanıldığından emin değilim.
kiamlaluno

Kullanmanız gereken kod hakkında anlamadığınız özel bir şey var mı? Hangi kodu kullandın? Kodunuzu göstermek faydalı olacaktır; Yapmanız gerekenleri önermek için kimin cevap vereceğine yardımcı olacaktır (örneğin, kodunuzda neyin yanlış olduğunu bildirme).
kiamlaluno

Cevap için teşekkürler. Veritabanındaki kimlikleri araştırmam gerektiğini düşünüyorum. O kadar zor olmamalı.
vogelsang

Yanıtlar:


1

Features modülü bunu çok iyi bir şekilde yapıyor ve rolleri ve izinleri (ve diğer birçok şeyi) tek bir dokunuşta dışa aktarmanıza izin veriyor:

http://drupal.org/project/features

Ancak kendi check-out'ınızı yapmak istiyorsanız İzinler API'sı:

http://drupal.org/project/permissions_api


2
Sorun, özellikleri kullanırken rol kimliğini bilmemenizdir, çünkü özelliklerinizi kurduğunuzda atanırlar. Bu nedenle, izinleri atamak için kimlikleri bir şekilde bulmanız gerekir. Muhtemelen sadece veritabanında bir arama var.
vogelsang

24

Özellikler böyle şeyler için oldukça kullanışlıdır. Bununla birlikte, roller oluşturmanız ve programatik olarak izinler eklemeniz gerekiyorsa, veritabanını kendiniz kazmaya gerek yoktur.

Yeni bir kullanıcı rolü oluşturduğunuzda user_role_save(), aktardığınız nesneyi atanan yeni kullanıcı rolü kimliği ile günceller. Bunun bir örneğini standard_install()Standart kurulum profilindeki işlevde görebilirsiniz .

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

Bu örnek, yeni bir kullanıcı rolü oluşturabileceğinizi ve ardından riddoldurulan özelliğine erişebileceğinizi gösterir user_role_save(). Ayrıca, bu role nasıl izin verileceğini de gösterir user_role_grant_permissions(). Bu durumda, mevcut tüm izinleri 'yönetici' rolü üstleniyor.

Başkası tarafından oluşturulan bir kullanıcı rolünün kimliğini almanız gerekiyorsa, user_role_load_by_name()o kullanıcı rolünün nesnesini almak için kullanabilirsiniz . O zaman sadece kimliği yakala $role->rid.


2
Bu, bir kerede birden fazla izin vermek / iptal etmek için güzel: api.drupal.org/api/drupal/modules%21user%21user.module/function/…
Brian Wood


20

Programlı olarak mevcut rollere izinlerin nasıl atanacağı konusundaki orijinal soruya daha yakın bir kod örneği eklemek istiyorum.

Rolleri adlarıyla arayabilir, rol kimliğini alabilir ve ardından izinleri aşağıdaki gibi atayabilirsiniz (örneğin bir hook_update uygulamasında):

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);
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.