web-dev-qa-db-ja.com

ロールベースのデータベーススキーマ

オフィスのドキュメント管理アプリのデータベースを設計しています。バックエンドを正しく設定して、今後問題が発生しないようにしたい。基本的にすべてのユーザーは、スーパー管理者、管理者、スタッフ、インターンなどの役割に分類されます。すべてのドキュメントにはアクセス制限があります。たとえば、パブリック(すべてのユーザーロールはドキュメントを表示できます)、プライベート(ドキュメントを作成したユーザーのみが表示できます)、ロールベース(つまり、同じロールを持つユーザーのみがこれらのドキュメントを表示できます)。ただし、管理者と特権管理者はすべてのドキュメントを表示できます。 1人のユーザーが多くのドキュメントを持つことができます。また、ユーザーの役割をスタッフから管理者などに更新することもできます。このプロジェクトのORMとしてSequelizeを使用してPostgresを使用します。上記の説明に基づいて、これは良いデザインですか?何を改善できますか?任意の入力をいただければ幸いです。 Current design

2
ss_millionaire

私が見る1つの問題

ロールベース(つまり、同じロールを持つユーザーのみがこれらのドキュメントを表示できます)

このタイプのドキュメントをインターンとして作成し、後でスタッフのポジションに昇格した場合、そのドキュメントはインターンまたはスタッフに表示されますか?

Document自体にaccess_typeフィールドを設定し、DocumentPermissionエンティティを使用して、特定のDocumentにアクセスできるロールを指定します(アクセスタイプはロールベースです)。

また、(しかし、それは私のopinionであり、私はあなたのようなより多くの実装を見てきました)、ロール(superadmin、admin、staff、intern)を別のエンティティーに入れ、UserRoleエンティティrole_name列ではなく、そのエンティティへのリンク。あなたのデザインは結合を節約するかもしれませんが、結局それは柔軟性が低くなります。

2
Glorfindel

このデザインは健全な出発点です。

  • users
  • usersには複数のrolesを含めることができます
  • documentsはユーザーに関連しています(ユーザーは、自分の役割が何であれ、または今後も、ドキュメントの所有者であると想定しています)
  • documentsには複数のaccess types

しかし、それは不完全だと思います。次の2つは不足しています。

  • 確かに、あなたはあなたが役割ベースのアクセスを持つ可能性を望んでいると言いました、すなわち特定の役割にドキュメントへの許可を与えます。つまり、DocumentPermissionUserRolesの間にもオプションの関係が必要です。
  • 「パブリック」および「プライベート」アクセスと、それらの例外を管理者およびスーパーユーザー(および後で監査人に)に対してハードコーディングされた方法で処理したい場合を除いて(これらの特別な役割はどのように識別されますか? )、アクセスタイプと関連ドキュメントに対する特別な権限を持つロールとの関係を作成するAccessPolicyテーブルが必要です。
1
Christophe