web-dev-qa-db-ja.com

プログラムでロールにアクセス許可を割り当てる方法は?

インストールを簡単にするために、プログラムでいくつかの役割に割り当てたい権限があります。

モジュールをインストールして権限とロールの両方を作成しているため、権限を設定するロールIDがありません。これまでのところ、ロールIDを必要とするプログラムでロールを割り当てるの方法を見つけただけです。

どういうわけか、名前(文字列)でロールを検索し、ロールIDを取得して、アクセス許可を割り当てることができるのでしょうか。それは正しくないと感じます。

25
vogelsang

機能モジュールはこれを非常にうまく行い、ロールとパーミッション(および他の多くのもの)を一気にエクスポートできます。

http://drupal.org/project/features

ただし、独自のチェックアウト許可APIをロールアウトする場合:

http://drupal.org/project/permissions_api

1
krlucas

機能は、このようなものにはかなり便利です。ただし、プログラムでロールを作成して権限を追加する必要がある場合は、自分でデータベースを掘り下げる必要はありません。

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を取得します。

25
Chaulky

プログラムで既存のロールに権限を割り当てる方法についての元の質問により近いコード例を追加したいと思います。

名前でロールを検索し、ロール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);
  }
}
20
batigolix