現在、プロジェクト管理ソフトウェアを開発中です。また、セキュリティを実装するための正しいアプローチを決定するのに苦労しています。私たちは ACL と RBAC の両方を見てきましたが、特定の理由から、少なくとも両方の組み合わせが必要であることはすでにかなり確信しています。しかし、どちらの世界にも適切な解決策がない問題がいくつかあります。説明させてください:
次のエンティティがあるとします。
- さまざまなロールを持つユーザー、つまり
- プロジェクトリーダー
- ワーカー
- 管理者
- プロジェクト
- 割り当てられたユーザー
- プロジェクトのタスク
ここで、次のルールを表現する必要があります:ロールWorkerを持つユーザーは、割り当てられたプロジェクトに関連するTaskのみを表示できます。
これにより、ユーザーはリスト全体の一部のタスクのみを表示できるようになります。
RBAC を使用して、実際に Task を読み取る権限をRolesに付与します。ただし、特定のエンティティが関与しているため、条件は適用されません。ACL を使用することもできますが、ACL エントリを要件と一致させておくことの悪夢を恐れています (ユーザーは変更でき、役割は変更でき、新しいタスクを導入でき、正しいエントリを取得する必要があり、これも複雑です)。
もちろん、特定のプロジェクト ( ) を表示するときに特定のクエリが存在する可能性がありますが、これは「現在のすべてのタスクWHERE project_id = 123
の表示」には役立ちません。この場合、基本的にすべてのタスクを表示することができますが、ACL をチェックする必要があります。すべてのエントリ。
また、「現在のユーザーが表示できる最初の 25 個のタスクを取得する」などのことを、DB からすべてのタスクをロードせずに、ACL に基づいてフィルタリングする、つまりページネーションを処理することなく確実に行うにはどうすればよいですか。