Bin auch kein Profi, was die Attribute angeht, deshalb kann ich dir leider nicht sagen, ob es über die
RTTI einen "eleganten" (wenn man
RTTI überhaupt als elegant bezeichnen darf) Weg gibt, aber ich befürchte, ohne zumindest den Namen der Methode nochmal explizit darin aufzuführen bzw an die
CurrentUserHasRight
Funktion zu übergeben, wird es recht umständlich bis unmöglich.
Hauptproblem dürfte sein die Adresse der aktuellen Methode zu ermitteln, um dann deren
RTTI Infos abfragen zu können. Eine Möglichkeit wäre eine "Wrapper-Funktion", welche die eigentliche Methode aufruft und vorher den Check ausführt (wird allerdings schon wieder sehr umständlich, wenn die Zielmethoden unterschiedliche Parameter und Rückgabewerte besitzen). Alternativ könntest du per inline Assembly den aktuellen
EIP
ermitteln und gegen die VTable der Objektinstanz abgleichen (um durch unterschiedliche Anzahl von Parametern bedingte Varianz zu kompensieren). Aber auch das ist ziemlich hacky und zudem nicht für 64-Bit möglich.
Edit:
Noch ein paar andere Gedanken und Methoden dazu hier:
https://stackoverflow.com/questions/...hi-as-a-string
https://stackoverflow.com/questions/...me-in-delphi-7