業務上に、申請/承認フローがよく利用されます(例えば、ユーザーがある権限を申請して、管理者が申請一覧を確認しながら、承認/拒否操作を行います)。Durpalの各種モジュールを利用して、この承認フローの作成が可能です。
この申請/承認フローは以下のステップから構成され
- ユーザーがあるリンク/ボタンを押して、ある申請(例:権限変更申請)を行います
- 決まった承認権限ルートにある管理者に申請者リストが表示されます。
- 申請メールを管理者に送信します
- 管理者が承認/拒否される前に、ユーザーが申請取消の取り消すが可能
- 管理者が申請者管理画面を参照して、承認/却下操作を行います
- 管理者が申請者一覧の参照ができます。
- 申請内容を審査して、承認/拒否を操作します。
- ユーザーの申請状態を変更します(申請のキャンセルができないようにします)
- 承認/拒否結果をユーザーにメールで送信します。
要件をイメージは以下のよう:
必要なモジュールと用途
- Flag:申請中の状態管理、承認/却下前にキャンセルが可能にします。
- Views:Flagがオンになっているユーザー/コンテンツ一覧を表示し、承認/却下リンクを表示します。
- Rules:承認/却下リンクが押されたら、承認/却下の処理を行います。
承認申請例、説明の前提
- 申請要件例: ユーザーが「登録ユーザー」権限から「投稿者」権限に変更申請
- サイト管理者がユーザーの権限変更申請を承認/却下審査をして、承認・却下操作を行います。
- 「投稿者」権限が何のコンテンツを作成などはここで議論しないし、「投稿者」権限が作成済みとなります
- ここで、「登録ユーザー」はDrupalの「認証済みユーザー」ではありません。「登録ユーザー」はある特定な権限を付与したユーザーとなります。(違う権限を分けたので、「認証済みユーザー」権限は利用しない)
Flagで要件申請ボタン/リンク
- Flag管理画面(ホーム » 管理 » サイト構築 » Flags)で、「投稿者権限申請」Flagを新規作成します
- Flag タイプ: ユーザー
- Global flag : チェックしない(ユーザー単位でのFlag管理)
- Flag link text: 投稿者権限申請
- Unflag link text: 投稿者権限申請の取消 (承認/却下前に申請の取消)
- Flag access: 「登録ユーザー」をチェック
- ディスプレイオプション: 適切な場所にチェックして、上記フラグを表示させます
- 上記フラグ(投稿者権限申請)を押してから、すぐに「投稿者権限申請の取消」リンクが表示されます
Viewsで申請ユーザー一覧表示、承認/却下リンク
- Viewsの管理画面(ホーム » 管理 » サイト構築 » ビュー)で、ユーザー一覧ビューを作成します
- 表示: ユーザー
- ページ作成: チェックします
- パス: 適切なパス(例:/approve-editor-permission)
- 表示形式: テーブル
- ほかの項目は初期値のままにします
- ビューを作成したら、ビューの詳細画面で表示内容を設定します。
- 高度ー>「リレーションシップ」: Flags: Flagging flag を追加します
- 識別子: 適切な名前につける
- Flag: 上記作成したフラグ名を選択します
- By: Any User
- 「フィールド」項目に適切な項目を追加します
- 名前、Flagged time(申請日時)などを追加します
- グローバル: 独自のテキスト を追加します(承認リンク)
- テキスト内容: <a href="/approve-user-application?user-name=[name]&user-id=[uid]&user-mail=[mail]">承認<a>
- 上記リンクにあるパラメータ:user-name,user-id,user-mailはRulesのアクション作成時にユーザーの情報を渡します
- Token: name, uid, mail は画面に非表示フィールドから取得します(ここでTokenモジュールがインストールされている前提)
- 上記設定で、フラグが立てたユーザー一覧表示と各ラインに「承認」リンクが表示されます。
Rulesで「承認」リクエストの受け取り、承認処理
- Rules単体ではURLのパス部分のチェック、パラメータチェックとパラメータ取得機能はありません。ここで、以下の二つサブモジュールが必要となります。
- Rules管理画面(ホーム » 管理 » 環境設定 » ワークフロー)で新規ルールを作成します
- 名前: 適切な名前を入力します
- Event: Drupalが初期化されている
- 条件: データ比較
- And条件グループを作成します(以下の条件をこのグループに入れます)
- Check Path条件を作成します
- Condition追加メニューにある「Path」(Path Rule)から「Check path」を選択します
- 値:Viewsで設定されたURLのパス:「/approve-user-application」
- Check if URL argment exists条件作成
- Condition追加メニューにある「URL argument」(Rule URL Argumentモジュール)から「Check if URL argument exists」を選択します
- 値:Viewsで設定されたURLにあるパラメータ:「user-mail」
- Check if URL argment exists条件の「user-id」と「user-name」をそれぞれ作成します
- アクション:ユーザーの権限変更、メール送信、画面のリダイレクトなど
- URLからパラメータを取得して、アクション用のTokenを作成します
- Action追加メニューにある「URL argument」(Rule URL Argumentモジュール)から「Provide URL argument value」を選択します
- 値:text
- URL ARGUMENT NAME:user-mail (user-id、user-nameも次に作成)
- 出力された変数のセクションで適切な変数名を作成します
- 変数ラベル:User Mail from URL
- 変数名:user_mail_from_url
- 上記ステップで複数の変数(user id、user name)を作成します
- PHPコードでユーザー権限の追加/削除操作を行います(通常なアクションはユーザーの取得などができないため)
- 「acctionを追加」メニューで「独自のPHPコードを実行」を選びます
- 以下のコードを入力します
// ユーザーオブジェクトの取得
$user = user_load( $user_id_from_url );
// すべての役割を取得
$roles = user_roles(TRUE);
// 編集者役割
$editor_rid = array_search('編集者', $roles);
// 登録者役割
$register_rid = array_search('登録者', $roles);
// ユーザー役割の変更
if( isset( $user ->roles) ){
// add role: 編集者
user_multiple_role_edit(array($user->uid), 'add_role', $option_rid) ;
// remove role: 登録者
user_multiple_role_edit(array($user->uid), 'remove_role', $staff_rid) ;
}
- メール送信アクション作成
- 「acctionを追加」メニューで「システム」のメール送信を選びます
- 送信先に上記作成した「user_mail_from_url」をTokenとして入力します
- 題名、本文などの項目は適切で入力します
- ページのリダイレクト設定(Viewsで設定したURLは実ページはないので、処理完了後に、ページをリダイレクトする必要がある)
- 「acctionを追加」メニューで「システム」のページリダイレクトを選びます
- リダイレクト先は適切のURLを入力します。