2017-07-04 4 views
0

承認のために私のアプリケーションにロールシステムを実装する必要があります。我々のシステムには約5種類の役割があります。enumとロールを格納するための別のテーブル

我々は2つのオプションを持っているこれらの役割を維持するために、

代替#1

1.Createレールの役割モデルで列挙型、

enum role: {super_admin: 1, translator: 2, approver: 3, sales_admin: 4, marketing_admin: 5, guest: 6}

2.In役割テーブル、今私たちは持っていますID user_id role_id

代替品#2

1. 2モデルRole and Role_Userを作成します。

ロールテーブルはID | role_nameが含まれ、ROLE_USERが好まれるべきID | user_id | role_id

が含まれているのだろうか?

+1

私はこれにいくつかの具体的なルールはないと思います。特定のシステムとあなたの個人的な好みに対する見積もりが増えています。個人的に私はいつでも列挙型で別のテーブルを好む –

+0

データベースに格納するということは、データがSQL(レポート、スタンドアロンSQLクエリなど)を持つ誰でも利用できることを意味しますが、パフォーマンスの観点から列挙型を好む。代替案3は両方を行うことですが、すべての基盤をカバーしますが余分な作業を追加します。 –

+0

私は、アプリケーションコードを変更して配備することなく、新しい役割を追加する柔軟性を与えるので、2番目のアプローチをお勧めします。また、エンティティを明確かつ分離した状態に保つことは常に有効です。 – money

答えて

0

別のテーブルの利点は、ユーザーがシステムに必要なものであれば、複数の役割を持つことができることです。また、データベースにさまざまなロールを格納することは、データベースレベルのデータ整合性を強化するためには有効です。つまり、存在しないロールをユーザーに追加することはできません。

ロールとジョインテーブルの別のテーブルを使用すると、ジョインテーブルに適切なインデックスを追加してください。

それ以外は、実際にはコンテキストとユースケースによって異なります。システムがシンプルであれば、列挙型の方法に間違いはない。

+0

複数の役割をハードコードすることはできません – Andrew

2

私は、今後、追加の役割の可能性がある場合、その追加の役割を作成する負担はないように、第2のアプローチに進むことをお勧めします。最初のアプローチでは、今後追加する可能性のある追加のロールを列挙型で編集する必要があります。

0

ロールにコードがどのように焼き付けられているかによって異なります。システムによっては、「管理者」または「モデレータ」または「ユーザー」という非常に厳格な概念があり、スロットに適合しない役割を導入すると混乱を招く可能性があります。そのような場合、ハードコーディングされたほうがよいでしょう。内部名をラベルに変換するだけのテーブルがあるかもしれません。翻訳が関係するときには特に重要です。 「管理者」は「管理者」になります。または、システムが使用する他の言語の意味でもかまいません。

ロールテーブルで任意のアクセス許可を定義できるシステムがあれば、はるかに意味があります。システムが故意に設計されているため、システムの構造内で機能するカスタムロールを作成することができます。この場合の「役割」は、一連のアクセス許可にすぎません。

関連する問題