0

JSF/JPA Web アプリケーション プロジェクトの一部として、完全なユーザー認証モジュールを実装する必要があります。私は認証に Apache Shiro を使用していますが、要件に適合する場合は承認にも使用できます。ただし、現在、データベース スキーマ モデルを設計しており、以下の表を作成しています。これが最善のアプローチであるかどうかはわかりません。フィードバックが必要です。

要件

役割とグループ メンバーシップに基づいてユーザーを承認します。役割は、グループまたは個々のユーザーに割り当てることができます。データは複数のテーブルに分散していますが、ここではプロジェクトの詳細を格納するテーブルの例を示します。

承認用テーブルのリスト

Table:APP_USER : This table will store the user details along with hashed password
Columns: ID/Username/Password

Table:APP_ROLES : This table stores the roles definitions
Columns:ID/Rolename/Desc

Table: APP_PRIVILEGES : This table stores the actual privileges that are assigned to roles
Columns: ID/Privilege Name/Privilege Type/Role ID

Table: APP_GROUPS: This table stores the group definitions
Columns: ID/GroupName/

Table: APP_USER_GROUPS_MAPPING: This table stores mapping of users to groups and has references to APP_USERS & APP_Groups tables
Columns: USER_ID/Group ID

Table: APP_GROUP_ROLES_MAPPING: This table stores the mapping of groups to roles and has references to APP_ROLES and APP_GROUPS
Columns: Group_ID/Role_ID


Table: APP_USER_ROLE_MAPPING: This table stores the mapping of users to roles in case the role is directly assigned to users and has references to APP_USERS and APP_ROLES tables
Columns: USER_ID/ROLE_ID

Table: APP_PROJECTS_DETAILS: This is one of the many tables that store the data. This specific table holds project details
Columns: ID/PROJECT_NAME/DESC etc

Table: APP_GROUP_PROJECTS_MAPPING: This table stores the permission mapping of which groups has access to which projects.

認可の例: ユーザーがプロジェクトの削除を試みる Test1


  1. APP_GROUP_PROJECTS_MAPPING からプロジェクト Test1 のプロジェクト/グループ マッピングを取得します。
  2. APP_USER_GROUPS_MAPPING からユーザー グループを取得する
  3. ユーザー グループのいずれかがプロジェクト Test1 へのアクセス権を持っているかどうかを確認します
  4. ユーザーにアクセス権があると仮定して、APP_USER_ROLE_MAPPING と APP_GROUP_ROLES_MAPPING をそれぞれクエリして、ユーザーが直接またはグループ経由で DELETE_PROJECT 権限を持っているかどうかを確認します。
  5. プロジェクト Test1 を削除

個人的にはこれは少し複雑だと思いますが、これをどのように改善できるかわかりません

4

2 に答える 2