簡単にインストールできるように、プログラムでいくつかの役割に割り当てたい権限があります。
モジュールをインストールし、許可とロールの両方を作成しているため、許可を設定するロールIDがありません。これまでのところ、ロールIDを必要とするロールをプログラムで割り当てる方法を見つけました。
どういうわけか、名前(文字列)でロールを検索し、ロールIDを取得してから許可を割り当てることができるのだろうかと思います。それはちょうどいい感じではありません。
簡単にインストールできるように、プログラムでいくつかの役割に割り当てたい権限があります。
モジュールをインストールし、許可とロールの両方を作成しているため、許可を設定するロールIDがありません。これまでのところ、ロールIDを必要とするロールをプログラムで割り当てる方法を見つけました。
どういうわけか、名前(文字列)でロールを検索し、ロールIDを取得してから許可を割り当てることができるのだろうかと思います。それはちょうどいい感じではありません。
回答:
機能モジュールはこれを非常にうまく行い、ロールとパーミッション(および他の多くのもの)を一気にエクスポートできます。
http://drupal.org/project/features
ただし、独自のチェックアウトPermissions APIを展開する場合:
機能はこのようなものに非常に便利です。ただし、プログラムでロールを作成し、アクセス許可を追加する必要がある場合は、自分でデータベースを掘り下げる必要はありません。
で新しいユーザー役割を作成すると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()
がある場合は、そのユーザーロールのオブジェクトを取得するために使用できます。次に、でIDを取得し$role->rid
ます。
プログラムで既存の役割にアクセス許可を割り当てる方法に関する元の質問に近いコード例を追加したいと思います。
ロールを名前で検索し、ロール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);
}
}