Was Dir vorschwebt, haben wir in umgekehrter Form in einem Projekt als UserSkill implementiert. Das Recht selbst hat einen (vom Kunden) definierten Skillwert, der User einen initialen, der vom Kunden (oder wie auch immer automatisch nach gewisser Zeit) erhöht/geändert werden kann.
Das ist noch mit anderen Möglichkeiten kombiniert (z.B. "eigenes Passwort eingeben" - zum Aufwachen)
Das ganze System kann (vom Kunden!) beliebig komplex gestaltet werden.
Auf Clientseite ist das in den Basisklassen fest verankert und muss nicht geändert werden bei neuen / anderen Inhalten.
Für harte Rechte, also
SQL Rollen/-Rechte haben wir das je Maske / Datenquelle ebenfalls in einer Basisklasse gekapselt, allerdings nicht auf Feldebene.
Zusätzlich gibt es eine Klasse für clientseitige "Sonderrechte" (z.B. "kann das Drucken" oder "..importieren.."). Sie prüft über
DB seitige Definitionen, ob eine bestimmte Funktion ausgeführt werden darf. Da das Sonderrecht idR. mit einer ausprogrammierten Klasse im Client einhergeht, wird das hier gezielt abgefragt und ist so auch kein nennenswerter Zusatzaufwand.
Zu Deiner Idee:
Ich würde sagen, erstmal ok, aber ich stelle mir vor, dass in der Praxis kein User in einer unternehmesweiten "Fachlichkeit" überall einen bestimmten/gleichen Level hat/ erreicht.
Du bekommst also irgendwann Probleme, weil der Müller (der König aus dem Lager), die Feinheiten in der Produktion justiert...