In meiner Ausbildung wurde mir gesagt, dass es eine fehlerhafte Idee ist, dem Benutzer tatsächliche Primärschlüssel (nicht nur DB-Schlüssel, sondern alle primären Zugriffsmethoden) zur Verfügung zu stellen.
Ich dachte immer, es sei ein Sicherheitsproblem (weil ein Angreifer versuchen könnte, Dinge zu lesen, die nicht von ihm stammen).
Jetzt muss ich überprüfen, ob der Benutzer trotzdem Zugriff hat. Gibt es also einen anderen Grund dafür?
Da meine Benutzer ohnehin auf die Daten zugreifen müssen, muss ich irgendwo dazwischen einen öffentlichen Schlüssel für die Außenwelt haben. Nun, dieser öffentliche Schlüssel hat die gleichen Probleme wie der Primärschlüssel, nicht wahr?
Es gab die Anfrage eines Beispiels, warum das sowieso so ist, also hier ist eines. Denken Sie daran, dass es sich bei der Frage nicht nur um das Prinzip selbst handelt, wenn es in diesem Beispiel zutrifft. Antworten auf andere Situationen sind ausdrücklich erwünscht.
Eine Anwendung (Web, Mobile), die Aktivitäten abwickelt, verfügt über mehrere Benutzeroberflächen und mindestens eine automatisierte API für die systemübergreifende Kommunikation (z. B. möchte die Buchhaltungsabteilung wissen, wie viel dem Kunden basierend auf den durchgeführten Aktionen berechnet wird). Die Anwendung hat mehrere Kunden, sodass die Trennung ihrer Daten (logischerweise werden die Daten in derselben Datenbank gespeichert) ein Muss des Systems ist. Jede Anfrage wird auf ihre Gültigkeit hin überprüft.
Die Aktivität ist sehr feinkörnig, so dass sie in einem Containerobjekt zusammengefasst ist. Nennen wir sie "Task".
Drei Anwendungsfälle:
- Benutzer A möchte Benutzer B an eine Aufgabe senden, damit er ihm einen Link (HTTP) sendet, um dort eine Aktivität auszuführen.
- Benutzer B muss das Gebäude verlassen, damit er die Aufgabe auf seinem Mobilgerät öffnet.
- Das Rechnungswesen möchte dem Kunden die Aufgabe in Rechnung stellen, verwendet jedoch ein Buchhaltungssystem eines Drittanbieters, das die Aufgabe / Aktivität automatisch mit einem Code lädt, der auf die REST-API der Anwendung verweist
Für jeden Anwendungsfall muss (oder wird es einfacher, wenn) der Agent eine adressierbare ID für die Aufgabe und die Aktivität hat.
ON UPDATE CASCADE
wurde @gnat erstellt (mysql-spezifisch?). Wenn das Problem jedoch die Sicherheit ist, sollte die Zugriffskontrolle im Backend erfolgen und dem Benutzer sowieso nicht vertrauen