web-dev-qa-db-ja.com

ルールとコンテンツアクセスを使用して、日付以降のノードアクセスを制限する

目標

特定の日付が経過した後、コンテンツアクセス権限をオフに設定して、特定のタイプのすべてのノードへのアクセスを遮断する方法に取り組んでいます(現在、アクセスレベルが誰にも表示されないように設定されていないと想定しています) 、ルールが日付範囲で実行されるたびにこれがトリガーされることを望まないため)。ルール+コンテンツアクセスは#drupal IRCチャンネルで提案されましたが、機能するかどうかは完全にはわかりません。

これまでに行ったこと

  • Cron Maintenanceタスクの実行時にトリガーされるルールを追加しました。
  • 「データ比較」ルールを追加して、site:current-dateをチェックし、特定の値を超えているかどうかを確認しました。

問題

「ロールによるアクセスの取り消し」のアクションを追加するためにアクセスするとき、アクセスを取り消すコンテンツタイプを設定するオプションがありません。実際、セレクターの唯一のオプションはsite:です。

また、ノード条件を追加しようとしましたが、ノードフィールドを選択する方法もありません。これは、おそらくイベントをトリガーしたもの(つまり、ノードの場合はコンテンツ更新)を操作したいため、および選択したためです。 cron私はサイトにのみアクセスできます:パラメータ。

私の質問

Cronメンテナンスランを介してコンテンツタイプのすべてのノードのコンテンツ権限を変更するようにルールに指示する方法はありますか、またはルール条件を介してトリガーされるカスタムメソッドを記述する必要がありますか? (またはそのことについて完全に別のモジュール)。

3
Cthos

命題:

  1. /admin/modulesで「Rules Sheduler」を有効にします。
  2. /admin/config/workflow/rules/componentsに移動して、コンポーネントを作成します
    • 新しいコンポーネントを追加:
      • コンポーネントプラグイン=> Action set
      • "継続する"
    • コンポーネントプラグイン:
      • コンポーネント名を指定します(例:ノードアクセスコンポーネントの取り消し)
    • 表から選択:
      • データ型=>コンテンツ
      • ラベル=> Node:ComponentまたはNodeまたは必要なもの
      • マシン名=> node_componentまたはnodeまたは必要なもの
      • 使用法=> Parameter
      • "継続する"
    • アクションを追加:
      • 追加するアクションを選択=> Revoke access by role
      • データセレクター:はデフォルトでnode-componentとして設定されます。これは、上記のステップのテーブルで指定したセレクター名です
      • 「ロールベースのアクセス制御設定」checkコンテンツの表示/編集/削除のアクセスを取り消すロール
      • "保存する"
  3. admin/config/workflow/rulesに移動して、新しいルールを追加します(新しいルールを追加):
    • 新しいルールを追加:
      • ルール名を指定します(例:ノードアクセスルールの取り消し)
      • イベントに反応=> After saving new content
      • タイプで制限=>オプションで、このルールを適用するノードタイプを選択します
      • "保存する"
    • イベント:
      • (オプション)ルールが既存のノードでトリガーされる必要がある場合は、ここに「既存のコンテンツの更新後」イベントを追加することもできます
    • 条件:
      • (オプション)ここに追加条件を追加します
    • 行動:
      • アクションを追加
      • 追加するアクションを選択=> Schedule component evaluation
      • コンポーネント:作成済みのコンポーネントを選択(ノードアクセスコンポーネントを取り消す)
      • 継続する
      • 評価予定日:
      • [データ選択に切り替えて指定]ボタンをクリックして、次のように指定します。
        • データセレクター:node:created(または他の日付ベースの条件)
        • オフセットを追加:オプションで、選択したデータセレクターのオフセットを指定します(例:1 seconds
      • 識別子:表示(ルール)「スケジューラ」(/admin/config/workflow/rules/schedule)および「最近のログメッセージ」(/admin/reports/dblog)に表示される識別子(「このタスクを識別するために使用される文字列」)を指定します。トークン/置換パターンを使用できます。
      • ノード:コンポーネント:
      • データセレクタ=> node
      • 保存する

これは何ですか?

このソリューションはルールをトリガーします anewおよび/またはexistingノードが保存されました。ルールはアクションセットを使用してコンポーネントを「スケジュール」します。この場合、アクションはcheckedユーザーロールへのノードアクセスを取り消すことです。コンテンツが新規または編集済みとして追加された後、コンポーネントは、指定されたロールのノードに対するノードアクセスをスケジュールどおりに取り消しますcron runで。新しい記事を+1秒追加すると、次のcronでアクセスできなくなります(表示/編集/削除)>(node:created +1秒)。

ヒント:

Schedule component evaluationをアクションとしてコンポーネントに追加することもできます。たとえば、このルールをnode:changedの日付を使用してトリガーしたい場合、ノードを編集するたびに、アクション「ノードアクセスを取り消す」の日付が前に移動します(例:ノードが変更されます=>ルールは1日でトリガーされます(コンポーネント設定のオフセット)。ノードは明日変更されるため、ルールは明日+1日などにトリガーされます)。


コンポーネントをインポートしてテストできます。

{ "rules_revoke_node_access_component" : {
    "LABEL" : "Revoke node access component",
    "PLUGIN" : "action set",
    "OWNER" : "rules",
    "REQUIRES" : [ "content_access_rules" ],
    "USES VARIABLES" : { "node_component" : { "label" : "Node:Component", "type" : "node" } },
    "ACTION SET" : [
      { "content_access_action_revoke_node_permissions" : {
          "node" : [ "node-component" ],
          "permissions" : { "value" : [
              "view:2",
              "view:1",
              "view:3",
              "view_own:2",
              "view_own:1",
              "view_own:3",
              "update:2",
              "update:1",
              "update:3",
              "update_own:2",
              "update_own:1",
              "update_own:3",
              "delete:2",
              "delete:1",
              "delete:3",
              "delete_own:2",
              "delete_own:1",
              "delete_own:3"
            ]
          }
        }
      }
    ]
  }

}

ルールをインポートしてテストできます。

{ "rules_revoke_node_access_rule" : {
    "LABEL" : "Revoke node access rule",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "rules_scheduler" ],
    "ON" : { "node_insert" : [], "node_update" : [] },
    "DO" : [
      { "schedule" : {
          "component" : "rules_revoke_node_access_component",
          "date" : { "select" : "node:created", "date_offset" : { "value" : 1 } },
          "identifier" : "Revoke node access",
          "param_node_component" : [ "node" ]
        }
      }
    ]
  }
}
1
mi6th

Cron runによって呼び出されるルールを作成し、変更するすべてのノードをリストし、必要なすべてのノードセットのアクセス許可についてループします。

0
Bobík