オフィスのドキュメント管理アプリのデータベースを設計しています。バックエンドを正しく設定して、今後問題が発生しないようにしたい。基本的にすべてのユーザーは、スーパー管理者、管理者、スタッフ、インターンなどの役割に分類されます。すべてのドキュメントにはアクセス制限があります。たとえば、パブリック(すべてのユーザーロールはドキュメントを表示できます)、プライベート(ドキュメントを作成したユーザーのみが表示できます)、ロールベース(つまり、同じロールを持つユーザーのみがこれらのドキュメントを表示できます)。ただし、管理者と特権管理者はすべてのドキュメントを表示できます。 1人のユーザーが多くのドキュメントを持つことができます。また、ユーザーの役割をスタッフから管理者などに更新することもできます。このプロジェクトのORMとしてSequelizeを使用してPostgresを使用します。上記の説明に基づいて、これは良いデザインですか?何を改善できますか?任意の入力をいただければ幸いです。
私が見る1つの問題
ロールベース(つまり、同じロールを持つユーザーのみがこれらのドキュメントを表示できます)
このタイプのドキュメントをインターンとして作成し、後でスタッフのポジションに昇格した場合、そのドキュメントはインターンまたはスタッフに表示されますか?
Document
自体にaccess_type
フィールドを設定し、DocumentPermission
エンティティを使用して、特定のDocument
にアクセスできるロールを指定します(アクセスタイプはロールベースです)。
また、(しかし、それは私のopinionであり、私はあなたのようなより多くの実装を見てきました)、ロール(superadmin、admin、staff、intern)を別のエンティティーに入れ、UserRole
エンティティrole_name
列ではなく、そのエンティティへのリンク。あなたのデザインは結合を節約するかもしれませんが、結局それは柔軟性が低くなります。
このデザインは健全な出発点です。
users
users
には複数のroles
を含めることができますdocuments
はユーザーに関連しています(ユーザーは、自分の役割が何であれ、または今後も、ドキュメントの所有者であると想定しています)documents
には複数のaccess types
しかし、それは不完全だと思います。次の2つは不足しています。
DocumentPermission
とUserRoles
の間にもオプションの関係が必要です。AccessPolicy
テーブルが必要です。