Drupal 7に Rules と Content Access の両方のモジュールを含む7(およびそのサブモジュールのコンテンツアクセスルール)で新しいルールを構築しようとしていますしたがって、特定の役割に対して「アクセスを許可または取り消す」などの新しいアクションを取得します。
認証されたユーザーはWebサイトにコンテンツを追加できますが、(ドラフトのように)デフォルトでは非公開です。
ユーザーが準備ができたら、ユーザーはコンテンツを公開できます(別のモジュールがそれを行うことができます ドラフトを保存 、 コンテンツを公開 )。
コンテンツが公開された後(どのイベントですか)、ノードの作成者の変更アクセスを取り消す必要があります。
このチュートリアル が示すように、ただしフラグなしでルールを作成しようとしました。
これは機能しません。作成者は公開後もコンテンツを編集でき、このノードのアクセス制御は変更されていません(コンテンツタイプ設定の[コンテンツノードごとのアクセス制御設定]チェックボックスをオンにしました)。
Content Access が動作するためには公開されたノードが必要なので、問題は私のノードの公開されていない状態、つまりアクセス設定の欠如にあると思います。次に、 Rules に、存在しないコンテンツアクセスを変更するように依頼します...
ここでは カスタムモジュール を使用できますが、理論的には実行できるので、ルールモジュールを使用したいと思います。
これが私のルールコードのエクスポートです:
{ "rules_revoke_edit_access_after_publication" : {
"LABEL" : "Revoke edit access after publication",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "content_access_rules" ],
"ON" : { "node_update--manuscript_submission" : { "bundle" : "manuscript_submission" } },
"IF" : [ { "data_is" : { "data" : [ "node:status" ], "value" : "1" } } ],
"DO" : [
{ "content_access_action_revoke_node_permissions" : {
"node" : [ "node" ],
"permissions" : { "value" : [
"view:3",
"view_own:3",
"update:3",
"update_own:2",
"update_own:3",
"delete:3",
"delete_own:3"
]
}
}
}
]
}
}
認証済みユーザーのデフォルトアクセス: (非公開の表示 モジュールのおかげで、(必要なコンテンツタイプの)非公開のコンテンツを表示/表示)
公開後に必要なアクセス:自分のコンテンツのみを表示します。
これが私があなたが探しているものだと思う規則( Rules エクスポート形式)です:
{ "rules_disallow_edit_own_content_after_node_is_published" : {
"LABEL" : "Disallow edit own content after node is published",
"PLUGIN" : "reaction rule",
"ACTIVE" : false,
"OWNER" : "rules",
"REQUIRES" : [ "rules", "content_access_rules" ],
"ON" : { "node_update--manuscript_submission" : { "bundle" : "manuscript_submission" } },
"IF" : [
{ "data_is" : { "data" : [ "node-unchanged:status" ], "value" : "0" } },
{ "data_is" : { "data" : [ "node:status" ], "value" : "1" } }
],
"DO" : [
{ "content_access_action_revoke_node_permissions" : {
"node" : [ "node" ],
"permissions" : { "value" : [
"view:3",
"view_own:3",
"update:3",
"update_own:2",
"update_own:3",
"delete:3",
"delete_own:3"
]
}
}
}
]
}
}
このルールを独自の環境にインポートして、レビュー/ QAテストを実行してください。
このルールの「手がかり」(魔法?)の詳細:
manuscript_submission
のノードの更新」に関連しています。注:上記のルールは、マシン名manuscript_submission
のコンテンツタイプに「調整」されます。そのマシン名を他のコンテンツタイプに変更します(例:article
)。このルールを実際にインポートする前に、必ずこのような変更を行ってください(ルールUIではインポート後にその「イベント」を変更できないため)。
回避策を使用して、「...必要なノード作成者の変更アクセスを取り消す...」を実装することもできます。
「 「新しいコンテンツを作成する前に」などのルール条件を指定する方法? 」に関する質問への私の回答をご覧ください。これからの引用は次のとおりです。あなたのケースでもお勧めします。
ルール(システム)イベント「Drupal is initializing」(= init)を使用してみてください。これは、実際には編集フォームが表示される前です。
これにより、実際には「アクセスを取り消す」必要はありません(その必要はありません)。代わりに、Rulesモジュールを使用して、誰かがノードの編集セッションを開始しようとしているRulesイベントをキャプチャします。次に、チェックする追加のルール条件に応じて(この場合、「現在のユーザーはこのノードの作成者ですか?」かつ「このノードのステータスは公開されていますか?」)、Rulesアクションを使用してユーザーを「別の場所」にリダイレクトします(ユーザーが要求した編集フォームを表示するのではなく)。
注:上記の私の回答でプロトタイプのルールの例を使用する場合は、ルールの条件を適合させる必要があることは明らかですおよび/またはあなたのケースに合うようにするためのルールアクション(編集フォームのURLのような?).