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


26

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

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

どういうわけか、名前(文字列)でロールを検索し、ロールIDを取得してから許可を割り当てることができるのだろうかと思います。それはちょうどいい感じではありません。


権限テーブルは、ロール名ではなくロールIDを使用します。ロールIDを取得し、そのIDを使用して許可を追加する必要があります。許可テーブルには、許可の文字列と、それを実装するモジュールの名前が必要です(少なくともDrupal 7では)。モジュール名が実際に何らかの方法で使用されているかどうかはわかりません。
kiamlaluno

使用すべきコードについて理解していない具体的なものはありますか?どのコードを使用しましたか?コードを表示すると便利です。誰があなたが何をする必要があるかを提案するのに役立ちます(例えば、コードの何が間違っているかを報告する)。
キアマルノ

答えてくれてありがとう。データベースでIDを検索する必要があると思います。そんなに難しくないはずです。
-vogelsang

回答:


1

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

http://drupal.org/project/features

ただし、独自のチェックアウトPermissions APIを展開する場合:

http://drupal.org/project/permissions_api


2
問題は、機能をインストールするときに割り当てられるため、機能を使用するときにロールIDがわからないことです。したがって、何らかの方法でアクセス許可を割り当てるためにIDを見つける必要があります。おそらくデータベース内の単なる検索です。
-vogelsang

24

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

で新しいユーザー役割を作成すると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ます。


2
:これは、一度に複数の権限を取り消す/付与のための素晴らしいですapi.drupal.org/api/drupal/modules%21user%21user.module/function/...
ブライアンウッド


20

プログラムで既存の役割にアクセス許可を割り当てる方法に関する元の質問に近いコード例を追加したいと思います。

ロールを名前で検索し、ロール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);
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.