一定の役割を持っているすべてのユーザーにDrupalの役割を付与

StackOverflow https://stackoverflow.com/questions/1669785

  •  13-09-2019
  •  | 
  •  

質問

私は私が行うことができますどのように役割YのサブセットであることをロールXを望む、自動的つまり役割、役割のX、別々の役割を付与されているすべてのDrupalのユーザーに、役割のY.を適用する必要がありますこの?

役に立ちましたか?

解決

あなたはカスタムモジュールに hook_user() を実装することができます。 「挿入」および/または「更新」アクションでは、あなたは$account->roles配列の役割Yをチェックしたいです。存在する場合はいない既にある場合は、ロールXを追加します。これはあなたのルールは、ユーザーアカウントが作成され、および/または変更されるたびに適用されることを確実にするでしょう。

は、ブートストラップ/ 1時間動作させるには、 user_multiple_role_edit() のを見てみましょう。これは、ユーザーIDの配列のための役割を追加または削除することができます。また、データベースに直接それを行うことができます:

INSERT INTO users_roles (uid, rid)
  SELECT uid, [roleX_ID] AS rid FROM users_roles
    WHERE uid IN
      (SELECT uid FROM users_roles WHERE rid = [roleY_ID])
    AND uid NOT IN
      (SELECT uid FROM users_roles WHERE rid = [roleX_ID])
;

他のヒント

私は、ユーザーを維持し、彼らはすべての時間を最新の状態にあることを確認することですカスタムモジュールに良い解決策をhook_userを使用してヘンリク・オペルに同意します。

通常、私は似SQLまたは何かを書く気にしないだろうが、それは生産現場でだから、生のSQLを書くときに、何かを簡単に間違って行くことができる場合ので、この場合には、私は、別のルートを少しタイプミスをすることができます希望します大きなトラブルを引き起こします。もう一つの良い点は、あなたが文句を言わない、あなたのデータベース上で実行し、DrupalのAPIを介して物事を行うときに正常に動作していますいくつかのプロセス、フックおよびその他のプロセスと同期しなくなるかもしれないものを、生のSQLを意識するのDrupalなどの問題に実行することができるということです。

その代わりに、Drupalは、ユーザ管理インタフェースを使用することができます。私は実際にこのような場合には、それはあなたがやりたいの最も簡単なの方法だと思います。単に学生であるすべてのユーザーをフィルタリングします。すべてのユーザー]をクリックし、それらにメンバーの役割を与えます。これは時間がない中、数回のクリックで行われ、DrupalはあなたのためのすべてのSQLを処理しますので、非常に安全です。


更新しました その多くのユーザーで、私はあなたが views_bulk_operations <使用してカスタムユーザーおよびコンテンツ管理ページの設定を持っていないことを驚いています/>。数分を使用して、セットアップユーザーのステータス、役割を変更するように一括操作をプリフォーム、またはノードに対して同様のタスクを実行するために使用することができます管理者ページをすることができます。あなたが露出ビューフィルタを使用して、独自のフィルタを作成することができます。だから、数回のクリックで、あなたは学生の役割を持つすべてのユーザーを選択することができ、それはメンバーではありません、それらをすべて選択し、それらにメンバーのロールを追加します。あなたがこのモジュールに探して検討すべきで、これを行う利点は、迅速かつ安全だということだけではありませんが、あなたはあなたのサイトの管理者のためのいくつかの素晴らしい管理ページを作成することができ、などのコンテンツ制作ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top