Ich versuche, den besten Weg für ein grundlegendes Sicherheitssystem für eine Website zu finden. Ich weiß, ich möchte Benutzer und Gruppen.
Ich dachte ich hätte:
user_table
user_id
user_name
...
group_type
group_id
group_name
parent_id
...
group_table
id
user_id
group_id
Der erste ist der Benutzer, der zweite ist die Gruppe und der dritte ist die Zwischentabelle, die die beiden verbindet. Ein Benutzer hat viele Gruppen.
Klingt das in Ordnung?
database-design
Johnny
quelle
quelle
GROUP_TYPE
Tabelle sollte einen NamenGROUP
oder ähnliches haben und SieGROUP_TABLE
sollten sowohl auf Benutzer als auch auf Gruppen verweisen, da dies die Verknüpfung ist.SELECT
und ein Feld benennen,FROM
damit Sie eine Abfrage wieSELECT [FROM] FROM [SELECT]
Antworten:
Die traditionelle Methode, dies zu modellieren, ist die Verwendung eines Musters namens rollenbasierte Sicherheit .
Die Idee ist nicht nur, Benutzergruppen zu haben, sondern auch Gruppen von Berechtigungen. So sieht das Muster aus:
Beachten Sie, dass Sie reservierte Wörter für Tabellennamen vermeiden möchten. Benennen Sie Ihre Tabellen daher nicht genau so, wie im Diagramm gezeigt.
So funktioniert es: Ihren Gruppen oder Rollen ist nicht nur eine Liste der ihnen zugewiesenen Benutzer, sondern auch eine Liste der ihnen zugewiesenen Berechtigungen. Auf diese Weise können Sie beide steuern, wer was kann, aber auch, was sie können, wenn Sie mir folgen.
quelle
ROLE
Tabelle in Einzel- und Gruppentypen unterteilt werden, wobei der Gruppentyp null bis viele Mitglieder und der Einzeltyp genau ein Mitglied hat. Wie Sie diese Kardinalitätsregeln durchsetzen, liegt bei Ihnen. Dies kann deklarativ in Ihrem Datenbankschema erfolgen. In diesem Fall müssen Sie das abgebildete Schema geringfügig ändern. Oder Sie verwenden möglicherweise die Anwendungslogik. In diesem Fall sieht Ihr Schema immer noch so aus, wie ich es mir oben vorgestellt habe.