web-dev-qa-db-fra.com

Meilleure pratique de conception de base de données d'autorisations de rôle d'utilisateur?

Je souhaite concevoir une base de données pour une application Web dans laquelle l'utilisateur peut accéder à des onglets particuliers en fonction des autorisations accordées à un rôle.

Ce que j'ai fait jusqu'à présent, c'est que j'ai créé deux tables SER_TABLE et SER_ROLES.

SER_TABLE a les champs ci-dessous:

  • id (clé primaire)
  • nom d'utilisateur
  • mot de passe
  • prénom
  • nom de famille
  • date_crée
  • role_id_fk (clé étrangère)

SER_ROLES a les champs ci-dessous:

  • id (clé primaire)

  • nom_rôle (par exemple ADMIN, TAB1_USER, TAB2_USER)

  • date_crée

Ici, l'utilisateur ayant role_name " ADMIN " peut voir tous les onglets, les autres utilisateurs peuvent accéder uniquement à des onglets spécifiques.

Ma question est de savoir si j'ai besoin de créer une table SER_PERMISSIONS ayant une clé étrangère dans SER_ROLES table avec les champs ci-dessous:

  • id (clé primaire)
  • permission_type (ALL, TAB1, TAB2 ....)

ou dois-je gérer cela au niveau de mon code? Quels seraient les inconvénients et les avantages des deux approches?

7
Joginder Pawan

Comme l'a écrit krokodilko dans son commentaire, cela dépend du niveau de flexibilité dont vous avez besoin.
J'ai implémenté les autorisations basées sur les rôles pour l'un de mes clients comme suit:

  1. Utilisateur (identifiant (PK), nom d'utilisateur (unique), mot de passe ( salé et haché! ), prénom, nom, téléphone, etc.)
  2. Rôle (id du rôle (PK), nom du rôle (unique), description du rôle)
  3. Autorisation (permission id (PK), nom de l'autorisation (unique)) - les onglets/écrans/actions vont ici
  4. Utilisateur au rôle (ID utilisateur, ID de rôle) - PK est les deux colonnes combinées
  5. Rôle à autorisation (id de rôle, id d'autorisation) - PK est les deux colonnes combinées

Mais mon exigence était d'être le plus flexible possible, et c'est un système qui ne cesse de croître (6 ans et plus).

Je suppose que de nombreuses applications peuvent faire en sorte que l'utilisateur joue le rôle de relation un à plusieurs, au lieu de plusieurs à plusieurs comme dans mon cas, mais je n'irais pas avec des autorisations de codage en dur ou un rôle vers des autorisations dans n'importe quelle application.

29
Zohar Peled