この質問の背景は次のとおりです。 ルールとVBOを使用してノードを削除
概要:VBOビューは、特定のコンテンツタイプのさまざまなノードを選択します。ルールアクションセットは、このVBOビューをロードし、エンティティオブジェクトをループして削除するように指示されます。ルールはcronで実行/トリガーされ、そのアクションに対してこのアクションセットがあります。そのため、cronを実行すると、選択したノードが削除されます。
ただし、cronは匿名ユーザー(uid = 0)として実行され、コンテンツタイプは、匿名ユーザーがこのコンテンツタイプのノードを削除できないように構成されているため、ノードは削除されません。
Cronでノードが削除されるように、これをどのように解決できますか?
このコンテンツタイプのノードを削除する権限を匿名ユーザーに与えることは、このサイトでは適切な解決策ではありません。
おそらく、セキュリティ上の理由から、cronは匿名ユーザー(uid = 0)として実行されます。許容できるソリューションは、サイトのセキュリティを損なうものであってはなりません。
Rules を使用した「コードなし」のソリューションが不可能な場合は、プログラムによるソリューション(カスタムモジュールのコードなど)は確かに受け入れられます。
使用を検討する必要があるかどうかはわかりませんが、 Rules switch user モジュールは許容できる妥協案です。それに関するいくつかの詳細(プロジェクトページから):
このモジュールは、2つの新しいルールアクションを追加します。
- 別のユーザーに切り替える
- 別のユーザーから切り替える
これらのアクションは、権限のないユーザーに使用させたい操作がある場合に役立ちますが、ユーザーに十分な権限がないために失敗します。
全体像を把握するには プロジェクトページの画像 を参照してください。したがって、これらの2つのルールアクションを既存のルールアクションのリストの最初/最後に追加し、適切な権限を持つユーザーIDを使用する場合、にする必要があります仕事。
代わりに、独自のカスタムルールアクションを作成するために 関連コード (わずか76行...)を再利用することもできます。あなたがあなたの質問に書いたものに似ています(= "** ...カスタムモジュールのコード...")。有用な改善を行った場合は、変更をモジュールの課題キューに戻すことを検討してください。
ただし、このモジュールにはD7のDEV
バージョンしかありません(= Drupalの セキュリティアドバイザリポリシー !ではカバーされていません)。これは、モジュール/コードの使用/参照が危険であることを意味するのではなく、コードがDrupalセキュリティチームによって吟味されていないことを意味します。
これを行う別の方法を次に示します。
編集:おそらくこのアプローチを使用するべきではありませんが、ここでは、良いアイデアだと思うかもしれないが実際はそうでないと思う例としてここに残します。
私の記憶は少しかすんでいますが、私が数年前に同じようなことをしたと確信しています。
hook_form_alter()
を使用して、ノードフォームから「削除」ボタンを削除します。このアプローチは危険です。ユーザーが/delete
最後に、ユーザーが特に洗練されていない場合は、削除ボタンを非表示にするだけで十分です。