データベース主導のアクセス制御システムを実装したいと考えています。ACL、ロール、RBAC などについて読んでいますが、最も一般的なスキームにはいくつかの大きな欠点があるようです。たとえば、RBAC は、きめの細かいアクセス制御 (たとえば、特定のロールが特定のレコードの特定の列のみを更新できるようにするなど) の実装に関しては扱いにくいようです。
アクセス制御リストを次のように構成するとどうなるでしょうか。
| role | table | action | columns | conditions |
| ----- | ----- | ------ | -------- | ----------------- |
| user | user | view | name, id | self.id = user.id |
| user | user | update | password | self.id = user.id |
| admin | user | update | * | |
| admin | user | create | * | |
| admin | user | delete | * | |
アイデアは、ユーザーがデータベースにアクセスしようとしたときに、このテーブルに対してユーザーのロールがチェックされるというものです (したがって、モデル レベルで実装されます)。 action
のいずれかになり{create, view, update, delete, list}
ます。self
スコープは、現在のユーザーのプロパティを参照する予約済みのキーワードになります。これにより、たとえば、ユーザーが自分のパスワードのみを更新できるようにすることができます (他のユーザーのパスワードは更新できません)。
これは頑丈ですか?明らかに、URI などの他のタイプのリソースへのアクセスを制御するには、別のリストが必要です。