Ich verwende den .net Claims-Principal, wenn ich einen Benutzer authentifiziere. In unserem System hat ein Benutzer mehrere Berechtigungen (kann bis zu 70 sein).Hinzufügen von mehreren Werten zu einem Benutzerantrag unter Verwendung der JSON-Zeichenfolge
Nun, anstatt die Datenbank bei jeder Anfrage abzufragen macht ein Benutzer ich dachte, es wäre gut, die Berechtigungen als Anspruch zu speichern. Ich habe versucht, jede Erlaubnis als separaten Anspruch zu speichern, aber selbst wenn ich 10 Berechtigungen erhalte, wird die Größe des Tokens enorm erhöht.
Also statt 1 Anspruch für 1 Erlaubnis hinzufügen, fragte ich mich, ob es eine andere machen würde, wenn ich alle Berechtigungen zu 1 Anspruch hinzugefügt, und es tut. Es behält die Größe des Tokens klein, aber ich habe die Berechtigungen, die ich brauche.
Um dies zu tun, musste ich alle meine Berechtigungen von einem Array in eine JSON-Zeichenfolge konvertieren und sie dann als meine Forderung speichern. Um den Anspruch zu erhalten, kann ich die Zeichenfolge dann wieder in ein Array deserialisieren und muss die Datenbank überhaupt nicht abfragen.
Ist dies in Ordnung, oder ist das eine sehr schlechte Praxis? Mache ich eine tickende Zeitbombe und es wird bald explodieren, indem ich das mache?
Beispielcode hier
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
// get user permissions
var permissions = await _permissionService.GetAllAsync(user);
// create list of all permissions
List<object> claimPermissions = new List<object>();
foreach (var item in permissions)
{
claimPermissions.Add(new
{
Action = item.Action,
Type = item.Type
});
}
// convert list to json
var json = Newtonsoft.Json.JsonConvert.SerializeObject(claimPermissions);
// add claim
identity.AddClaim(new Claim("Permissions", json));
Hat jemand irgendwelche Meinungen zu diesem Thema? – Gillardo
Ich möchte, dass jemand die Frage beantwortet. Vergiss den Teil "Berechtigungen" und nimm es einfach als 70+ Gegenstände. Wäre das schlecht? – Mike