「新しいユーザーアカウントを保存した後」によってトリガーされるルールを設定しました。このルールは、単に電子メールを送信します。電子メールにはさまざまなトークンが含まれており、その1つがフィールド[account:field_country]
です。
このフィールドの「カスタム権限」を有効にし、フィールド権限モジュールを通じて次の権限を構成しました。
すべてのユーザー(選択した権限):
Create own value for field Country
View own value for field country
。モデレーター(すべての権限):
Create own value for field Country
Edit own value for field Country
。Edit anyone's value for field country
。View own value for field Country
。View anyone's value for field Country
。問題は、ルールが電子メールを送信するときに[account:field_country]
が空の文字列に置き換えられることです。すべてのユーザーにView anyone's value for field Country
を許可した場合にのみ、ルールはトークンを実際に選択された国の値に適切に置き換えます。
なぜこれを行う必要があるのですか?ルールがそのフィールドの値を取得できるようにするには、明らかにView anyone's value for field Country
が必要なため、ルールモジュールはどのユーザーとして実行されますか。
そしてここに役立つモジュールがあります:
このモジュールは、2つの新しいルールアクションを追加します。
- 別のユーザーに切り替える
- 別のユーザーから切り替える
これらのアクションは、権限のないユーザーに使用させたい操作がある場合に役立ちますが、ユーザーに十分な権限がないために失敗します。
十分な権限を持つ架空のユーザーを作成し、ルールアクションの実行時にこのユーザーに切り替え、完了したら再び切り替えます。
[〜#〜] edit [〜#〜]この回答は単なる回避策であり、直接質問することはできません。ルールが正常に実行されることを許可していません。
IMOあなたの "問題"(フィールドの値が空白である)は、イベント(= "after after a new user account")が原因です使用していますが、これは単に正しいイベントではない可能性があります。このユーザーがまだ「ブロック」されている場合(=登録手順で管理者の承認が必要な場合)、ルールモジュールがこのフィールドの内容をまだ表示しないようにするのは理にかなっています。
さらに、ここであなたのイベントのバリエーションであるイベントについて issue#430274 を見て、「何かを保存した後」が実際に発生する...「何かを保存する前に」(これはバグではなく、単にルールの仕組み...).
この種の問題を回避するための考えられる妥協策は、電子メールの送信をルールコンポーネントに変換することです。これにより、元のルールがそのルールコンポーネントの「実行をスケジュール」します(ルールスケジューラサブモジュールを使用)。新しいユーザーアカウントを保存します」... cronジョブが十分に頻繁に実行される場合、そうでない場合は、次回cronが実行されるときです)。この妥協により、ルールコンポーネントが実行されたときに、新しいユーザーアカウントが確実に保存されます...(そのため、そのフィールドが空白のままになる理由はもうありません...)。
このルールコンポーネントアプローチを使用すると、ユーザーアカウントが「ブロックされなくなった」場合にのみこの電子メールを送信することを検討することもできます(まだブロックされている場合は、同じコンポーネントを再スケジュールするためのルールロジックを追加します。 -後で実行する)。
ちなみに、Rules Schedulerを使用するルールに関するものはすべて、「匿名」権限で確実に実行されます。もちろん、その認証では不十分なケース(ルールアクション)があります(例:新しいノードの作成は匿名では許可されていません)。これらの場合でも、それを解決する方法もあります(その方法を知りたい場合:それについてのフォローアップの質問を投稿してください)。