Webアプリに役割ベースのセキュリティを実装しようとすると、データベースに、アクセス許可、役割、ユーザー、およびUserRole(つまり、ユーザーの役割への割り当て)のテーブルがあります。
各役割には一連の権限があります。アクセス許可は、0、1、2、4などの値を持つC#フラグ列挙型として定義されます。
データベースでは、役割テーブルには、役割の結合された権限フラグを格納するintフィールドがあります。(このようにして、個別のパーミッションテーブル(それは良いか悪いか?)とRolePermissions用の1対多のテーブルを持つことを避けます。
コードでは、ユーザーに割り当てられている役割の有効なアクセス許可を計算して、ユーザーがアクセスできるかどうかを確認します。.NETでは、列挙型フラグに対して論理演算を実行することで、これを行うのは非常に簡単です。
だから私の質問は:
この方法で行うことには不利な点がありますか(パーミッションテーブルとRolePermissionリンクテーブル(ロールに与えられたパーミッションごとに1つのレコードが含まれる)とは対照的ですか?