web-dev-qa-db-ja.com

cronを使用して、匿名ユーザーによる削除を許可しないコンテンツタイプのノードを削除する方法

この質問の背景は次のとおりです。 ルールとVBOを使用してノードを削除

概要:VBOビューは、特定のコンテンツタイプのさまざまなノードを選択します。ルールアクションセットは、このVBOビューをロードし、エンティティオブジェクトをループして削除するように指示されます。ルールはcronで実行/トリガーされ、そのアクションに対してこのアクションセットがあります。そのため、cronを実行すると、選択したノードが削除されます。

ただし、cronは匿名ユーザー(uid = 0)として実行され、コンテンツタイプは、匿名ユーザーがこのコンテンツタイプのノードを削除できないように構成されているため、ノードは削除されません。

Cronでノードが削除されるように、これをどのように解決できますか?

このコンテンツタイプのノードを削除する権限を匿名ユーザーに与えることは、このサイトでは適切な解決策ではありません。

おそらく、セキュリティ上の理由から、cronは匿名ユーザー(uid = 0)として実行されます。許容できるソリューションは、サイトのセキュリティを損なうものであってはなりません。

Rules を使用した「コードなし」のソリューションが不可能な場合は、プログラムによるソリューション(カスタムモジュールのコードなど)は確かに受け入れられます。

2
penname

使用を検討する必要があるかどうかはわかりませんが、 Rules switch user モジュールは許容できる妥協案です。それに関するいくつかの詳細(プロジェクトページから):

このモジュールは、2つの新しいルールアクションを追加します。

  • 別のユーザーに切り替える
  • 別のユーザーから切り替える

これらのアクションは、権限のないユーザーに使用させたい操作がある場合に役立ちますが、ユーザーに十分な権限がないために失敗します。

全体像を把握するには プロジェクトページの画像 を参照してください。したがって、これらの2つのルールアクションを既存のルールアクションのリストの最初/最後に追加し、適切な権限を持つユーザーIDを使用する場合、にする必要があります仕事。

代わりに、独自のカスタムルールアクションを作成するために 関連コード (わずか76行...)を再利用することもできます。あなたがあなたの質問に書いたものに似ています(= "** ...カスタムモジュールのコード...")。有用な改善を行った場合は、変更をモジュールの課題キューに戻すことを検討してください。

ただし、このモジュールにはD7のDEVバージョンしかありません(= Drupalの セキュリティアドバイザリポリシー !ではカバーされていません)。これは、モジュール/コードの使用/参照が危険であることを意味するのではなく、コードがDrupalセキュリティチームによって吟味されていないことを意味します。

3
Pierre.Vriens

これを行う別の方法を次に示します。

  • 新しいロールを作成し、削除するコンテンツタイプを削除する権限を付与します。
  • このタイプのユーザーを作成し、役割を付与します。
  • そのユーザーとしてログインし、ノードを削除するカスタムルールアクションを作成します。
  • VBOでそのアクションを呼び出します。
1
Patrick Kenny

編集:おそらくこのアプローチを使用するべきではありませんが、ここでは、良いアイデアだと思うかもしれないが実際はそうでないと思う例としてここに残します。

私の記憶は少しかすんでいますが、私が数年前に同じようなことをしたと確信しています。

  • 匿名ユーザーにノードを削除する許可を与えます。
  • hook_form_alter()を使用して、ノードフォームから「削除」ボタンを削除します。

このアプローチは危険です。ユーザーが/delete最後に、ユーザーが特に洗練されていない場合は、削除ボタンを非表示にするだけで十分です。

0
Patrick Kenny