条件付きアクセス許可を実装する最善の方法、つまりユーザーとチームが m 対 m であることを考えています。ただし、各チームには、ユーザー テーブルとの 1 対 m の「リーダー」関係もあります。
簡単にするために、「ユーザー」と「管理者」の 2 つの権限レベルがあるとします。次に、特定のチーム管理タスク、つまりグループ メールのみを、そのチームのリーダーのみが送信できるとしましょう。
現時点では、チーム リーダーに固有のすべてのアクションがデータベースにクエリを実行し、現在のユーザーがチーム リーダーであるかどうかを確認します (1 人のユーザーが多くのチームを率いる可能性があることに注意してください)。個人的には、"if($user->isLeader($team))" がいたるところにあるのが好きではありません。
ログイン時のユーザーセッション(ala phpBB)でユーザーが率いるチームのリストを設定するか、symfonyフィルターを使用して同じことを行うことを検討しました。
ただし、最初のアプローチでは、別のユーザーがチームのリーダーを変更する可能性がある場合、データが古くなる可能性があります。2 番目の方法では、ページの読み込みごとに追加のデータベース クエリが必要になります。
より良いアイデアはありますか?注: 1 つのプロジェクトに複数のアプリがあり、同じパーミッション モデル (つまり、バックエンドと API) を共有する必要があります。