web-dev-qa-db-ja.com

最適なユーザーロールアクセス許可データベース設計の実践

ユーザーがロールに与えられた権限に基づいて特定のタブにアクセスできるWebアプリ用のデータベースを設計したい。

これまでに行ったことは、2つのテーブルSER_TABLESER_ROLESを作成したことです。

SER_TABLEには以下のフィールドがあります。

  • id(主キー)
  • user_name
  • パスワード
  • ファーストネーム
  • 苗字
  • 作成日
  • role_id_fk(外部キー)

SER_ROLESには以下のフィールドがあります。

  • id(主キー)

  • role_name(例:ADMIN、TAB1_USER、TAB2_USER)

  • 作成日

ここで、role_name "[〜#〜] admin [〜#〜]"を持つユーザーはすべてのタブを表示でき、他のユーザーは特定のタブにのみアクセスできます。

私の質問は、テーブルを作成する必要があるかどうかですSER_PERMISSIONS外部キーを持つSER_ROLES以下のフィールドを持つテーブル:

  • id(主キー)
  • permission_type(ALL、TAB1、TAB2 ....)

または、コードレベルでこれを管理する必要がありますか?両方のアプローチの長所と短所は何ですか?

7
Joginder Pawan

Krokodilkoは彼のコメントで書いたように、あなたが必要とする柔軟性のレベルに依存します。
次のように、クライアントの1つに役割ベースの権限を実装しました。

  1. ユーザー(ユーザーID(PK)、ユーザー名(一意)、パスワード( salted and hashed! )、名、姓、電話など)
  2. 役割(役割ID(PK)、役割名(一意)、役割の説明)
  3. 許可(許可ID(PK)、許可名(一意))-タブ/画面/アクションはここに行く
  4. ユーザーからロール(ユーザーID、ロールID)-PKは両方の列を組み合わせたものです
  5. ロールからパーミッション(ロールID、パーミッションID)-PKは両方の列を組み合わせたものです

しかし、私の要件は可能な限り柔軟であることであり、まだ成長しているシステムです(6年以上)。

私の場合のような多対多の関係の代わりに、多くのアプリケーションがユーザーを1対多の関係として役割を持つことができると思いますが、どのアプリケーションでも権限や役割の権限をハードコーディングすることはしません。

29
Zohar Peled