Skip to main content

Versteckte User-Exits: Zugriffsberechtigungen manipulieren (GACL)

Die Mappentypen "Invoice", "Procurement" und "Mailroom" verwenden den Mappenklassenschutz und im Standard ist hier das Text-Feld "Rights" hinterlegt. Der Mappenklassenschutz berücksichtigt Zugriffsprofile und Benutzer-Logins. Standardmäßig setzen sich die Berechtigungen aus den Feldern "RightsInitial" und "RightsWorkflow" zusammen. Die Berechtigungen werden bei einer Weiterleitung automatisch erweitert. Jede Gruppe bzw. jeder Benutzer welcher am Workflow teilnimmt erhält automatisch Zugriffsrechte.

Im Feld "RightsInitial" werden die initialen Berechtigungen festgehalten, welche über die entsprechende WEB-Konfiguration gesetzt werden können. Diese Rechte werden bei einer weiterleitung neu ermittelt! Wenn initiale Berechtigungen abhängig von Feldwerten definiert wurden (zum Beispiel vom Mandanten-Feld) und sich der Feldwert in einer Mappe ändert, dann können neue Zugriffsberechtigungen hinzukommen und es kann auch vorkommen, dass Zugriffsberechtigungen wieder entzogen werden!

Das Feld "RightsWorkflow" speichert hingegen die Gruppen und Benutzer, die am Workflow zum Vorgang teilgenommen haben. Diese Liste wird immer weiter fortgeführt.

Die Zugriffsberechtigungen werden technisch über das Skript-Objekt "RightsGACL" gesteuert. Dieses Objekt wird mit dem DocFile-Objekt als Parameter aufgerufen und enthält folgende Methoden:

  • addWorkflowEntry(String login/tech ap name)
  • addAccessProfile(AccessProfile)
  • addSystemUser(SystemUser, Boolean add agent in case of absence)
  • checkRights(SystemUser)
  • createGACLString()
  • readInitialRights()
  • readRightsFromField(String fieldName)

Das Objekt hat folgende Eigenschaften:

Eigenschaft Typ Beschreibung
Error String Fehlermeldung
Result Boolean Ergebnis
DocFile DocFile-Objekt Aktuelle Mappe
DocFileID DocFile-ID Aktuelle Mappen-ID
Log String Logging-Informationen
RightsInitial Objekt Objekt mit den initialen Berechtigungen
RightsInitialStr String GACL-String mit den initialen Berechtigungen
RightsWF Objekt Objekt mit den Workflow-Berechtigungen
RightsWFStr String GACL-String mit den Workflow-Berechtigungen

Die Methode "createGACLString()" liefert den fertigen GACL-String (ohne diesen direkt in das Feld "Rights" zu schreiben). Ab Invoice V.1.1.200 enthält diese Funktion 2 optionale UserExit-Funktionen, um das GACL-Ergebnis zu manipulieren. Die Funktionen können bei Bedarf in eine UserExit-Bibliothek hinzugefügt werden.

/** Die Funktion wird nach dem Erstellen des GACL-Strings ausgeführt.
**/
RightsGACL.prototype.ue_BeforeCreateGACLString = function(){
	;
}

/** Die Funktion wird nach dem Erstellen des GACL-Strings ausgeführt.
 * In dem Beispiel wird ein zusätzliches Feld 'AdditionalRights' mit zusätzlichen Zugriffsberechtigungen ausgewertet.
**/
RightsGACL.prototype.ue_AfterCreateGACLString = function(){
    if( this.DocFile.hasField("AdditionalRights") ){
        this.Log += "[INFO]["+this.DocFileID+"] has field 'AdditionalRights'" + this.LineBreak;

        var userObj = {};
        var gaclArr = this.GACL.split("\r\n");
        for( var i=0; i<gaclArr.length; i++ ){
            var su = context.findSystemUser(gaclArr[i]);
            if( su instanceof SystemUser ){
                userObj[su.login] = su.login;
            }
        }

        var userArr = this.DocFile.AdditionalRights.split("\r\n");
        for( var j=0; j<userArr.length; j++ ){
            var su2 = context.findSystemUser(userArr[j]);
            if( su2 instanceof SystemUser ){
                if( userObj[su2.login] ){
                    this.Log += "[INFO]["+this.DocFileID+"]["+j+"] system user("+su2.login+") already has rights" + this.LineBreak;
                }
                else{
                    this.Log  += "[INFO]["+this.DocFileID+"]["+j+"] system user("+su2.login+") add GACL rights" + this.LineBreak;
                    this.GACL += su2.login+"\r\n";
                }
            }
        }
    }
    //util.out(this.Log);
}