Frage

Ich arbeite an einer Anwendung mit PHP + MySql.In meiner Anwendung habe ich eine Tabelle für Benutzer, eine Tabelle für Beziehungen (Freunde, Folgen, Abonnieren) und eine Tabelle für Beiträge.Die wichtigsten Aktionen für Benutzer sind:

  • Ein Benutzer hat Freunde
  • Ein Benutzer kann Beitragseinträge vornehmen
  • Ein Benutzer kann die Einträge seiner Freunde sehen
  • Und schlussendlich Ein Benutzer kann die Anzeige von Einträgen für bestimmte Freunde blockieren

Wenn Benutzer A mit Benutzer B befreundet ist, kann Benutzer A alle Einträge von Benutzer B sehen.Aber Benutzer B kann den Zugriff beispielsweise auf nur wenige Freunde beschränken.Die Abfrage lautet nun:Wie kann ich diese Berechtigungen verwalten?Ich dachte an eine Tabelle, in der jeder Benutzer gespeichert wird, der für die Anzeige eines bestimmten Eintrags gesperrt ist, aber das wäre keine gute Idee, wenn ein einzelner Benutzer mehrere Freunde haben kann.Wie kann ich das also lösen?Kann mir jemand zeigen, wie ich anfangen soll?Vielleicht die richtigen Begriffe für die Suche bei Google oder ein Link für etwas Ähnliches.

War es hilfreich?

Lösung

Du bist auf dem richtigen Weg.Sie werden verknüpfte Tabellen verwenden wollen.Sie würden mit einer Tabelle „Benutzer“ beginnen.Jeder Benutzer hat eine ID.Erstellen Sie dann eine Tabelle „users_friends“.Diese Tabelle würde aus zwei IDs bestehen, user_id und friends_id.Die letzte Tabelle wäre „users_restricted“, die ebenfalls aus zwei IDs bestehen würde, „user_id“ und „restricted_id“.

Zum Beispiel

users
user_id name 
1       user1
2       user2
3       user3

users_friends
friend1_id friend2_id
1          2
2          3

Dies besagt, dass Benutzer 1 und 2 Freunde sind und Benutzer 2 und 3 Freunde sind.(Dies setzt voraus, dass, wenn Benutzer 1 mit Benutzer 2 befreundet ist, Benutzer 2 auch mit Benutzer 1 befreundet ist.)

users_restricted
user_id restricted_id
1       2

Obwohl nun Benutzer 1 und Benutzer 2 Freunde sind, befindet sich Benutzer 2 in der eingeschränkten Liste, was bedeutet, dass Benutzer 2 nicht die Einträge von Benutzer 1 anzeigen darf.

Sie können sehen, dass Tabellen über IDs verknüpft sind und alle IDs aus der Benutzertabelle stammen.Dies kann auch auf Einträge ausgeweitet werden.Verweisen Sie einfach auf Einträge anhand ihrer ID.

Um Benutzer für bestimmte Einträge zu sperren, benötigen Sie die folgenden Tabellen.

entries
entry_id user_id ... other columns holding entry information
1        1
2        1
3        2
4        2

Jetzt hat Benutzer 1 2 Einträge (Eintrag 1 und Eintrag 2) und Benutzer 2 2 Einträge (Eintrag 3 und Eintrag 4) vorgenommen.Ein anderer Tisch würde die Einschränkungen enthalten.

entries_restricted
entry_id restricted_user_id
1        2

Dies würde bedeuten, dass Benutzer 2 Eintrag 1 nicht sehen kann.

Um die Einträge für Benutzer 2 sichtbar zu machen, würde Ihre Anweisung etwa so aussehen.

SELECT e.*, er.entry_id FROM entries e JOIN entries_restricted er ON e.entry_id=er.entry_id WHERE er.restricted_user_id != 2;

Die Anweisung wählt alle Eintragsinformationen aus, mit Ausnahme der Einträge, die auf Benutzer 2 beschränkt sind.

Andere Tipps

Sie können die folgenden Tabellen verwenden. Die erste Tabelle ist die Benutzertabelle (wie Jason.Wolfsmith vorgeschlagen)

users
u_user_id     u_name   
1             user1    
2             user2    
3             user3    

Die zweite Tabelle kann so sein.

friends_permissions
f_user_id  f_friend_id permission entries
1          2               1        entry1        
2          3               0
1          3               1        entry3

Diese Tabelle enthält die Erlaubnis und den Namen der Einträge, die Ansicht zulassen sollten. 1 - einige Einträge einschränken; 0 - alles zulassen. In der Spalte Genehmigung Der Datentyp kann als festgelegt ('1', '0') und Datentyp in festgelegt werden Einträge NULL.
Daher erlaubt User1 nicht, Eintrag1 auf Benutzer2 anzusehen. (Eintrag1 und Einstieg 3 stammen aus der Einträge).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top