一般的な役割ベースのアクセス制御のいくつかの並べ替えを実装する際に、我々は以下のよく知られた概念を持っている:ロールベースのアクセス制御 - db内のアクセス権リスト、またはコード内のアクセス権リスト(enumなど)は必要ですか?
- 役割
- ユーザー
- 許可
、ユーザーがロールに割り当てられますそれらの各々は、(リソースの操作/アクセスを実行するための)アクセス権のセットを有する。 ユーザーは、1つ以上のロール(権限のセットが割り当てられている)に割り当てられて操作を実行するための権限を取得します。
特定のアプリケーションでは、コードが実際にリソースへのアクセスが可能なさまざまな場所でアクセス許可を強制するため、アクセス許可はコンパイル時に定義されます。
考えられるアクセス許可/操作のセットが変更された場合 - コードに変更を加えて再コンパイルする必要があるため、データベース内の参照/参照テーブルを使用しても、 db adminは、アプリで使用されているすべての権限を一覧表示するために簡単なSQLクエリを実行できます。
私が見たほとんどのアプリケーションでは、アクセス許可のルックアップテーブルが作成され、-also-コードの列挙型にマップされます。
これを考えると、可能性のあるアクセス許可のリストを表すデータベーステーブルを実際に持っている理由はありますか(コードを掘り下げてデータベースを検索するのではなく、権限のリスト/列挙型)?
データベースのアクセス許可を持っていると、実行時にたとえば:ASP.NETコントローラクラスにDeleteUserというアクションメソッドがあります。データベースのPermissionsテーブルでCanDeleteUserという新しい権限を追加すると、実行時にどのように影響を受けますか? DeleteUserメソッドにコードを追加してデータベースのCanDeleteUser権限を確認し、再コンパイルして展開し、新しい権限が適用されるのを確認する必要があります。 – Krishna
これをデータベースに追加した後にアプリケーションを再コンパイルする必要がある理由はありませんか? boolを返すストアドプロシージャCheckIfHasAccess( 'DeleteItem'、 'CurrentUsername')を実行時に確認できます。 dbスキーマの更新の更新を参照 –