Hallo,
mein Problem besteht darin, daß ich die Situation schwer austesten kann, ohne mich selbst auszuschliessen; daher frage ich hier die Experten.
Ich habe zwei Gruppen im NAB, nennen wir sie
Gesamtabteilung und Unterabteilung.
Die Gruppe UNTERABTEILUNG ist in der rekursiven Auflösung der Gruppe GESAMTABTEILUNG enthalten.
Gesamtabteilung hat als ACL-Eintrag in einer Datenbank geringere (Basis)Rechte (Leser) als der ACL-Eintrag Unterabteilung (Autor). Aber GESAMTABTEILUNG hat eine Rollenzuweisung, die UNTERABTEILUNG nicht hat.
Ein Mitarbeiter von UNTERABTEILUNG erhält seine Basisrechte (Autor) aus der Gruppenzugehörigkeit mit dem höheren Basisrecht.
Ist sichergestellt, daß er ALLE Rechte (also auch die Rollen) nur aus diesem ACL-Eintrag erhält oder werden die Rollen als Summe der Rollen aus allen Einträgen, in denen er Mitglied ist, gebildet ?
Hintergrund: ich möchte die Navigationssteuerung über Outlines so gestalten, daß Mitglieder bestimmter Rollen einen reduzierten Ausschnitt bzw. sogar einen anderen Satz von Ansichten angeboten bekommen, während die Ersteller von Dokumenten (Unterabteilung) den vollständigen Satz erhalten.
Dafür muß sichergestellt sein, daß in der @UserNamesList-Rückgabe die spezielle Rolle NICHT enthalten ist, die das Heranziehen einer anderen Outline steuert. Für diejenigen, die es interessiert: Hier der Code, mit dem ich die Bestimmung der Outlines steuere. Es gibt dabei in einem Profildokument einen Default_eintrag und einige Einträge nach dem Muster
[Spezialrolle1] | outline1deutsch | outline1englisch
[Spezialrolle2] | outline2deutsch | outline2englisch
_outlineDefault:=@If(Dialogsprache="D";@GetProfileField(d_Setupform;"SetupStartNavigator");@GetProfileField(d_Setupform;"SetupStartNavigatorE"));
_outlinespec:=@GetProfileField(d_Setupform;"SetupFSSpecial");
_outlinespecRoles:=@Trim(@Left(_outlinespec;"|"));
_outlinespecEN:=@Trim(@RightBack(_outlinespec;"|"));
_outlinespecDE:=@Trim(@Right(@LeftBack(_outlinespec;"|");"|"));
_outlinespec:=@If(Dialogsprache="D";@If(_outlinespecDE="";_outlinespecEN;_outlinespecDE);@If(_outlinespecEN="";_outlinespecDE;_outlinespecEN));
_UNL:=@If(@Trim(_outlinespec)="";"";@Trim(@Left((@UserNamesList);"]")));
_UNL1:=@If(_UNL="";"";_UNL+"]");
_PassendeRollen := @Trim(@Transform(_UNL1;"var";
@If(@IsMember(var;_outlinespecRoles);var;"")));
_PlatzinRollen:=@Transform(_PassendeRollen;"var";@Member(var;_outlineSpecRoles));
_outlineNamentmp:=@If(_PlatzInRollen=0;"";@Transform(_PlatzinRollen;"var";
@Subset(@Subset(_outlinespec;var);-1)));
_outlineNamen:=@Trim(@Unique(_outlineNamentmp));
@If(_outlinenamen="";_outlinedefault;_outlinenamen)
Dank und Gruß
Norbert