多くの異なる種類のアクセス許可を提供する必要がある次のシナリオに遭遇することがよくあります。私は主に SQL Server 2000 で ASP.NET / VB.NET を使用しています。
シナリオ
さまざまなパラメーターで機能する動的許可システムを提供したいと考えています。部門または特定の人物だけにアプリケーションへのアクセス権を付与したいとしましょう。そして、成長し続ける多くのアプリケーションがあるとします。
過去に、私はこれを行うために知っている次の 2 つの方法のいずれかを選択しました。
パラメータの適用方法を決定するために使用される特別な列を持つ単一の権限テーブルを使用します。この例の特別な列は
TypeID
とTypeAuxID
です。SQL は次のようになります。SELECT COUNT(PermissionID) FROM application_permissions WHERE (TypeID = 1 AND TypeAuxID = @UserID) OR (TypeID = 2 AND TypeAuxID = @DepartmentID) AND ApplicationID = 1
権限の種類ごとにマッピング テーブルを使用し、それらをすべて結合します。
SELECT COUNT(perm.PermissionID) FROM application_permissions perm LEFT JOIN application_UserPermissions emp ON perm.ApplicationID = emp.ApplicationID LEFT JOIN application_DepartmentPermissions dept ON perm.ApplicationID = dept.ApplicationID WHERE q.SectionID=@SectionID AND (emp.UserID=@UserID OR dept.DeptID=@DeptID OR (emp.UserID IS NULL AND dept.DeptID IS NULL)) AND ApplicationID = 1 ORDER BY q.QID ASC
私の考え
例が理にかなっていることを願っています。私はそれらを一緒に石畳にしました。
最初の例は作業が少なくて済みますが、どちらも最良の答えとは思えません。これを処理するより良い方法はありますか?