2016-03-21 7 views
0

Ich bin ein Angular-Programmierer und ich nähere mich der Back-End-Welt. Ich bin neugierig zu wissen, wie funktioniert ein Back-End, das die Anwendung mit mehreren Benutzern über JWT verwaltet. Wenn ich etwas aus der Datenbank mit eckigen abrufen muss, ist es sehr einfach, weil es genügt, einen Dienst zu machen, in dem ich die URL von Rest-api eingebe ... aber was passiert am Backend, wenn Sie viele Benutzer haben? Angenommen, ich habe eine Webanwendung mit Authentifizierung, eine TODO-Liste mit Datum. Ich stelle mir vor, dass in der DB eine Liste mit allen Benutzern sein wird. Aber wie funktioniert es dann, wenn ein Benutzer mit einem Formular ein Ereignis und ein Datum hinzufügt? Sie erstellen eine DB-Tabelle 'Ereignisse', eine für jeden Benutzer? Oder eine große "Event" -Tabelle, die ALLE Ereignisse aller Benutzer enthält?Wie funktioniert Back-End mit einer Angular Web App Multi-User

Antwort

0

Ihre Frage hat nichts mit Angular und nicht einmal mit dem Back-End-Service zu tun, also werde ich diesen Teil ignorieren. Sie fragen also nach dem Entwurf von Multi-Tenant-Datenspeichern.

Sie erstellen eine DB-Tabelle 'Ereignisse', eine für jeden Benutzer? Oder eine große "Event" -Tabelle, die ALLE Ereignisse aller Benutzer enthält?

Hier gibt es kein richtig oder falsch. Es hängt alles von Ihren Bedürfnissen ab. Im Allgemeinen ist es ein Kompromiss zwischen Einfachheit und Isolation. Wenn Sie über eine relationale Datenbank sprechen (ich entnehme Ihre Formulierung), können Sie für jeden Mandanten eine separate Datenbank oder für jeden Mandanten ein eigenes Schema oder eine einzelne Tabelle mit einer indizierten Spalte erstellen. Sie könnten sogar einen separaten Server für jeden Mandanten einrichten. Alle sind praktikable Optionen. Die separate DB-Option ist am isoliertesten, aber schwieriger zu programmieren. Die einzelne Tabelle ist einfacher, aber der Datenspeicher ist freigegeben. Ich kann sagen, dass ich mit Kunden zusammengearbeitet habe, um diese Art von Lösungen zu entwerfen, und meistens wählen sie eine separate DB pro Benutzer.

Ich empfehle zu lesen this Artikel, der Multi-Tenant-Daten in SQL Server (funktioniert aber auch für andere relationale DBs). Es ist 10 Jahre alt, aber immer noch sehr relevant.

Natürlich kann diese Entscheidung auch von Ihrem Datenspeicher beeinflusst werden. Wenn Sie RDBMS nicht verwenden, haben Sie verschiedene Konzepte und Funktionen zum Organisieren von Daten, z. B. Sammlungen, Rollen, Ordner, Container usw. Außerdem verfügen einige Datenspeicher über integrierte Tools, um diese Anforderungen zu erfüllen. Im Beispiel - Azure SQL DB verfügt über eine Funktion namens Row Level Security, die die Verwaltung einer einzelnen Tabelle mit einer Mandantenidentifikationsspalte erleichtert. Es hat auch ein Konzept namens Elastic DB Pool und Elastic DB Tools für die Verwaltung des Szenarios der separaten DB pro Mieter. Ich bin sicher, dass andere Produkte \ Technologien vergleichbare Eigenschaften hat, aber das sind nur Beispiele, die mir helfen, den Punkt zu bringen.

1

In dem Szenario, das Sie beschrieben haben, würden Sie normalerweise eine "Ereignis" -Tabelle mit Ereignissen für alle Benutzer haben. Die Tabelle enthält jedoch auch eine Spalte mit der ID des Benutzers, der dieses Ereignis erstellt hat.

Wenn Sie die Ereignisse für einen angemeldeten Benutzer anzeigen, überprüfen Sie zunächst, ob das JWT-Token gültig ist (beachten Sie, dass, selbst wenn diese Überprüfung auf der Clientseite erfolgt, auch serverseitig, z sicherheits Gründe). Wenn das Token gültig ist, würden Sie die Benutzer-ID aus den Token-Ansprüchen abrufen. Sie würden diese ID dann in Ihrer Datenbankabfrage verwenden, sodass Sie nur Ereignisse abrufen, die zu dem angemeldeten Benutzer gehören.