Name der aufrufenden Funktion ermitteln

Einen wunderschönen guten Abend,

ich habe mich in einer “Rechteverwaltung” dermaßen verfranst, dass ich mich jetzt nur noch über Hilfsmittel herauswurschteln kann, dafür brauch ich aber Hilfe. (Nur ein Übungsprojekt, aber mit Deadline in 2 Tagen, also reichen auch nicht so professionelle Lösungen, solang ich da schnell etwas machen kann)

IST- Zustand:
Java ruft eine meiner Stored Procedures auf und ist dabei als Postgres bzw. einem vergleichbaren User angemeldet, der alles darf. Der erste Schritt in meiner Funktion ist es, eine Unterfunktion aufzurufen, um 1. zu ermitteln, ob dieser User eine Sessionid liefert, die gültig ist und 2. was dieser User für eine UserGroup hat (alles unabhängig von Datenbankusern oder Session) Anhand der Group setze ich eine Role und ab dann kann er nur noch begrenzt Funktionen aufrufen.

DENKFEHLER:
Da der User die Funktion ja schon betreten hat, ist es völlig egal, ob er nach dem Aufruf der Unterfunktion keinen Zugriff mehr hat, denn dann ist es schon zu spät und er führt sie trotzdem aus.

LÖSUNGSANSÄTZE:

  1. Jede Funktion nach dem Aufruf der Unterfunktion nochmal mit einem IF die Role prüfen lassen
  2. In der Unterfunktion in einer Rechtetabelle nachschauen lassen, ob die Role, die Funktion ausführen darf und sonst eine Exception werfen. DAFÜR brauche ich aber den Namen der äußeren Funktion. Meine Frage ist jetzt, gibt es eine Möglichkeit, den Namen zu ermitteln, oder muss ich einfach beim Aufruf der Unterfunktion den Namen hardcodiert übergeben?
  3. Hat jemand vielleicht spontan noch eine ganz andere Idee, wie das Dilemma zu lösen ist? Kann ich vielleicht Prozeduraufrufe aller erstmal umleiten und die Unterfunktion sozusagen dazwischen schalten? Klingt leider zu schön, um wahr zu sein…

EDIT: Habe mich für 2. Entschieden und frage mich/euch immernoch, ob es einen Weg gibt, den Namen der Funktion selbst zu ermitteln, damit ich den nicht selbst schreiben muss - nein, das hat nichts mit Faulheit zu tun, da ich den Aufruf ja auch reinschreiben muss, sondern damit, dass ich es möglichst Flexibel halten will, da man bei einem schnellen Ändern des Funktionsnamens schnell den Aufruf vergisst.
Vielen lieben Dank für eure Ideen
Pina

Ich arbeite mit Postgres 8.2 unter Windows und die Java-Version ist 6, wobei ich wenn möglich von dem Aufruf nichts ändern möchte, da das jemand anderes programmiert und der würde mich killen, wenn ich ihm das 2 Tage vor Ende sage :wink: