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