Mit Entity-Framework habe ich eine Entität namens Berechtigungen, die eine Reihe von bool
s hat, um anzugeben, was kann und was nicht getan werden kann.C# nameof in stark typisierten Parameter?
Ein bisschen wie:
public class Permissions
{
public int Id {get;set;}
public int GroupId {get;set;}
public bool ViewRecords {get;set;}
public bool EditRecords {get;set;}
public bool DeleteRecords {get;set;}
public bool CreateRecords {get;set;}
public bool CreateSubGroups {get;set;}
}
Sie erhalten die Idee. Jede Benutzergruppe hat eine davon und das ist alles gut.
Ich habe eine Sicherheitsdienste-Klasse, die diese Informationen gegen die richtige Gruppe und Aktion validiert und überprüft - wieder, alles funktioniert gut - aber ich bin mit einigen magischen Zeichenfolgen, die ich gerne vermeiden würde.
Zum Beispiel: public bool HasPermission(int groupId, string action)
Ich möchte als: public bool HasPermission(int groupId, Permission action)
Im Moment bin ich nameof
verwenden, so:
bool go = HasPermission(123, nameof(Permission.ViewRecords));
Allerdings gibt es eine Möglichkeit zur Karte die Klasseneigenschaften wären also:
bool go = HasPermission(123, Permission.ViewRecords);
Ich könnte es mit einem Enum machen, und die beiden beibehalten, um sich gegenseitig zu spiegeln, aber das ist ein Overhead, den ich gerne vermeiden würde - und während der Name funktioniert, ist die Tatsache, dass die Methode jede Saite empfangen kann und daher später gebrochen werden könnte auf der ganzen Linie.
Warum nicht eine Enum verwenden? Es ist nicht so viel Overhead und es verhindert, dass es von jemandem gebrochen wird, der eine unbekannte magische Schnur entlang der Linie passiert. –
Der andere Vorteil einer Enumeration besteht darin, dass Sie sie zu einem Flags-Enum machen können und auf einfache Weise nach mehreren Berechtigungen suchen können. – Servy
@ StephenWilson das ist wy Ich frage - während es nicht einen massiven Overhead ist versuche ich, die Anzahl der erforderlichen Änderungen zu minimieren, wenn (unweigerlich) eine neue Erlaubnis später hinzugefügt wird. Jetzt ist eine vollkommen gültige Antwort nur das - "Nein, ein Enum ist eine gute Sache (tm)". Mit @ Servy Punkt über 'Flags' (neue für mich dort), ein 'Enum' wird zwingender! – RemarkLima