Moin,
ich sitze erneut an einem Projekt und befinde mich aktuell in der entwurfsphase. Es gibt da eine Frage die mich schon länger beschäftigt.
Zuerst um was es geht:
Ich baue eine restful API (basierend auf PHP). Um den Code sauber zu halten gibt es für die einzelnen Resourcen Klassen, z.B. die Klasse Customer. Aktuell sieht mein entwurf so aus, das eine Klasse vollkommen egal von den berechtigungen des Users einfach das macht wofür sie gedacht ist, nämlich die Daten aus der Datenbank holen und in einem Objekt zu speichern, sowie die Daten zu manipulieren und am Ende zurück in die Datenbank zu schreiben.
Die Rechteverwaltung findet dann in den API scripten statt.
Also der Client ruft eine Adresse auf, meinetwegen etwas wie /rest/customer/3.
Durch diesen Aufruf wird dann das API Script ausgeführt welches seinerseits ein Objekt der Klasse Customer instanziiert. Das API Script prüft vorher allerdings ob der User dazu berechtigt ist.
Der Vorteil: Die Klasse selber muss sich um nichts kümmern, hat keinerlei Abhängigkeiten zu anderen Objekten und kann einfach ihr Leben chillen.
Der Nachteil: Wann immer ich die Klasse nutzen will, muss ich vorher auf die Berechtigung prüfen. Und die API muss auch noch entsprechend reagieren, ich habe also einigen Code "doppelt"
Wie löst ihr so ein Problem? Würde es sinn machen die Rechtverwaltung in die Klasse zu übernehmen? Im endeffekt existiert ohnehin ein Super Globales Objekt der Klasse PermissionManager über die man mit 2 Parametern (welches modul und welches recht) abfragen kann ob der Zugriff gestattet ist.
Zudem kann der Fall auftreten das ein User bestimme Felder nicht sehen, bzw. nicht bearbeiten darf. Lasse ich das einfach von der API filtern oder sollte die Klasse das von vornherein selber erledigen?
Löse ich die Rechteverwaltung aber in der Klasse muss das Objekt aber auch entsprechend reagieren können wenn ein Recht mal verweigert wird und die ganzen Methoden aufrufe verkomplizieren sich :-/
Wäre natürlich leichter wenn die API den aufruf der methode einfach gar nicht zulässt.
ich sitze erneut an einem Projekt und befinde mich aktuell in der entwurfsphase. Es gibt da eine Frage die mich schon länger beschäftigt.
Zuerst um was es geht:
Ich baue eine restful API (basierend auf PHP). Um den Code sauber zu halten gibt es für die einzelnen Resourcen Klassen, z.B. die Klasse Customer. Aktuell sieht mein entwurf so aus, das eine Klasse vollkommen egal von den berechtigungen des Users einfach das macht wofür sie gedacht ist, nämlich die Daten aus der Datenbank holen und in einem Objekt zu speichern, sowie die Daten zu manipulieren und am Ende zurück in die Datenbank zu schreiben.
Die Rechteverwaltung findet dann in den API scripten statt.
Also der Client ruft eine Adresse auf, meinetwegen etwas wie /rest/customer/3.
Durch diesen Aufruf wird dann das API Script ausgeführt welches seinerseits ein Objekt der Klasse Customer instanziiert. Das API Script prüft vorher allerdings ob der User dazu berechtigt ist.
Der Vorteil: Die Klasse selber muss sich um nichts kümmern, hat keinerlei Abhängigkeiten zu anderen Objekten und kann einfach ihr Leben chillen.
Der Nachteil: Wann immer ich die Klasse nutzen will, muss ich vorher auf die Berechtigung prüfen. Und die API muss auch noch entsprechend reagieren, ich habe also einigen Code "doppelt"
Wie löst ihr so ein Problem? Würde es sinn machen die Rechtverwaltung in die Klasse zu übernehmen? Im endeffekt existiert ohnehin ein Super Globales Objekt der Klasse PermissionManager über die man mit 2 Parametern (welches modul und welches recht) abfragen kann ob der Zugriff gestattet ist.
Zudem kann der Fall auftreten das ein User bestimme Felder nicht sehen, bzw. nicht bearbeiten darf. Lasse ich das einfach von der API filtern oder sollte die Klasse das von vornherein selber erledigen?
Löse ich die Rechteverwaltung aber in der Klasse muss das Objekt aber auch entsprechend reagieren können wenn ein Recht mal verweigert wird und die ganzen Methoden aufrufe verkomplizieren sich :-/
Wäre natürlich leichter wenn die API den aufruf der methode einfach gar nicht zulässt.
Zuletzt bearbeitet: