J'essaie de trouver le meilleur moyen pour un système de sécurité de base pour un site Web. Je sais que je veux des utilisateurs et des groupes.
Je pensais que j'aurais:
user_table
user_id
user_name
...
group_type
group_id
group_name
parent_id
...
group_table
id
user_id
group_id
Le premier est l'utilisateur, le second est le groupe et le troisième est la table intermédiaire qui relie les deux. Un utilisateur a plusieurs groupes.
Cela vous semble-t-il correct?
database-design
johnny
la source
la source
GROUP_TYPE
table doit être nomméeGROUP
ou quelque chose de similaire, et votreGROUP_TABLE
référence à la fois aux utilisateurs et aux groupes, car c'est ce qu'elle relie.SELECT
et un champFROM
afin d'avoir une requête commeSELECT [FROM] FROM [SELECT]
Réponses:
La manière traditionnelle de modéliser cela utilise un modèle appelé sécurité basée sur les rôles .
L'idée n'est pas seulement d'avoir des groupes d'utilisateurs, mais aussi des groupes d'autorisations. Voici à quoi ressemble le motif:
Notez que vous voulez éviter les mots réservés pour les noms de table, alors ne nommez pas vos tables exactement comme indiqué dans le diagramme.
La façon dont cela fonctionne est que vos groupes ou rôles ont non seulement une liste d'utilisateurs qui leur sont affectés, mais aussi une liste d'autorisations qui leur sont attribuées. Cela vous permet de déterminer à la fois qui peut faire quoi, mais aussi ce qu'il peut faire, si vous me suivez.
la source
ROLE
table peut être sous-typée en types Individuel et Groupe , où le type de groupe a de zéro à plusieurs membres et le type individuel a exactement un membre. La façon dont vous appliquez ces règles de cardinalité dépend de vous. Cela peut être fait de manière déclarative dans votre schéma de base de données, auquel cas vous devez modifier légèrement le schéma illustré. Ou vous pouvez utiliser la logique d'application, auquel cas votre schéma ressemble toujours à ce que j'ai illustré ci-dessus.