教義モデルにセキュリティ層を追加したいと考えています。SQL レベルでドクトリン フィルター内にアクセス許可チェックを追加できるようにするには、エンティティごとに計算されたアクセス制御トークンのキャッシュを含むいくつかのデータベース テーブルを維持する必要があります。
ここで、これらのテーブルを更新する必要があり、場合によっては、これらのキャッシュ テーブルの 1 つを完全に再構築する必要があります。これは、onFlush イベントをリッスンするイベント リスナーで行う必要があります。これをアーカイブするための最良の (最もパフォーマンスと信頼性の高い) 方法は何でしょうか?
新しいエンティティを永続化する方法と、既に永続化されているエンティティの関連付けとプリミティブ プロパティを変更する方法が文書化されています。これは、作業単位オブジェクトの computeChangeSet() または recomputeSingleEntityChangeSet() を呼び出し、各エンティティをこれらのメソッドのいずれかに渡すことによって行われます。これらの更新中はシステム全体をロックする必要があり、めったにありませんが、できるだけ早く実行する必要があります。また、最初にすべてのエンティティを読み取ることなく、エンティティを削除したり、テーブル全体を切り捨てたりする方法もわかりません。
- onFlush イベント内のエンティティを削除するにはどうすればよいですか?
- onFlush イベント内で一括更新 (テーブルの切り捨てと数十万レコードの挿入) を行うにはどうすればよいですか? この場合、 $EntityManager->getConnection()->executeUpdate() を使用できると思いますよね?
- onFlush イベント内でテーブルをロック (読み取り) するにはどうすればよいですか?