Schade: Da der
RAD-Server ja DataSnap verwendet, wäre ich davon ausgegangen, dass es auch Binär kann und nicht nur REST nutzt.
DataSnap ist aber relativ rudimentär (keine Benutzer Autorisierung, Authentifizierung, Statistiken, ....muss man alles selber basteln)
Also Property/Events/Events dafür sind schon enthalten und man muß nicht
komplett alles selbst machen.
Diese Ereignisse sind aber leer und man muß darin dann selber den Username+Passwort gegen irgendwas prüfen. (könnte man z.B. einfach über ein SELECT die Nutzerverwaltung seiner Datenbank oder vom Windows verwenden)
Die Zugriffskontrolle auf Serverklassen/Methoden kann man über ein Event und/oder via [Attribute] regeln.
DataSnap nutzt für Binär das DBX (dbExpress).
Will man auch Streams (z.B. von seinem eigenen DMS) mit über DataSnap laufen lassen, dann ist Binär besser, denn über REST ist es extremst-ultra-langsam.
Außnahme im DataSnap mit REST-Anbindung: TStream als Result (einziger VAR/OUT-Parameter), dort wird kein JSON ausgegeben, sondern direkt das Binäre.
HTTPS gibt es inzwischen auch und man kann sowohl bei Binär (
TCP/
IP), als auch beim JSON (HTTP/HTTPS), eine Komprimierung (
ZLib) und eine Verschlüsselung (RSA) aktivieren.
OnUserAuthenticate = beim Connecten des DataSnap-Client das User+Pass prüfen und Valid setzen (optional auch die UserRoles füllen)
OnUserAuthorize = bei Aufruf einer Methode die Erlaubnis prüfen (geht auch autoamtisch über
[TRoleAuth(...)]
)
Inzwischen hat man diese Methoden, welche der Experte generiert, mit Kommentaren gefüllt, die auch im TODO-Manager vom Delphi auftauchen.
Delphi-Quellcode:
// im DataSnap-ServerModul
procedure TServerContainer1.DSAuthenticationManager1UserAuthenticate(
Sender: TObject; const Protocol, Context, User, Password: string;
var valid: Boolean; UserRoles: TStrings);
begin
{ TODO : Validieren Sie den Client-Benutzer und das Passwort.
Wenn eine rollenbasierte Autorisierung erforderlich ist, fügen Sie dem Parameter UserRoles Rollennamen hinzu }
valid := True;
end;
procedure TServerContainer1.DSAuthenticationManager1UserAuthorize(
Sender: TObject; EventObject: TDSAuthorizeEventObject;
var valid: Boolean);
begin
{ TODO : Autorisieren Sie einen Benutzer zum Ausführen einer Methode.
Verwenden Sie Werte von EventObject, wie z.B. UserName, UserRoles, AuthorizedRoles und DeniedRoles.
Verwenden Sie DSAuthenticationManager1.Roles zum Definieren von 'Authorized'- und 'Denied'-Rollen
für bestimmte Servermethoden. }
valid := True;
end;