UserRoles

  • Hallo zusammen,


    In einer Maske gibt es einen Abschnitt "Problemstatus".
    In diesem Abschnitt darf nur derjenige einen Feldwert ändern der die Rolle "Problemstatus" hat. Das funktioniert aber nur wenn die Rolle in der ACL der Datenbank dem User zugewiesen wurde. Nun soll aber auch ein User den Wert ändern, nur für das aktuelle Dok, der die Rolle normalerweise nicht hat.


    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc=ws.CurrentDocument


    Dim session As New NotesSession
    Dim db As NotesDatabase
    Set db=session.CurrentDatabase
    Dim acl As NotesACL
    Dim entry As NotesACLEntry
    Set acl = db.ACL
    Set entry = acl.GetEntry( session.UserName )

    If entry.IsRoleEnabled("[AL]") Then
    If Not entry.IsRoleEnabled( "[Problemstatus]" ) Then
    Call entry.EnableRole( "[Problemstatus]" )
    Call uidoc.FieldSetText("Problemstatus","angefordert")
    Call entry.DisableRole( "[Problemstatus]" )
    End If
    End If



    Woran kann das liegen.Im Debugger sehe ich, das disem User die Rolle korrekt zugewiesen wird, wenn er die Rolle AL schon hat und die Rolle Problemstatus nocht nicht. Trotzdem kann der User das Feld nicht ändern. Fehlermeldung.


    "Das Feld kann nicht geändert werden"

  • Vermutlich weil die Zugriffsrechte erst bei einem Refresh des Dokumentes bzw beim Öffnen zugewiesen bzw aktualisiert werden.


    Wieso nimmst du den User nicht einfach mit in die Formel für die Abschnittsberechtigung mit auf ?

  • Wäre ein bisschen lang. In der DB gibt es allein 7 zugriffsgruppen für unsere Abteilungsleiter. Jede Abteilung hat eine eigene Gruppe für Ihre Abteilungsleiter. Jede dieser Gruppe hat noch die Rolle
    "Alsetzen". Den Abschnitt Pronlemstatus soll aber nur ein User ändern dürfen der in einer diese Gruppe steht.

  • Hallo lapfandi,


    Hat der User mit der Rolle [AL] die Manager-Rechte?
    (Nur die Manager dürfen die ACL verändern!)
    Wenn ja, dann versuch' doch mal nach EnableRole und DisableRole die ACL zu save'n...



    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc=ws.CurrentDocument


    Dim session As New NotesSession
    Dim db As NotesDatabase
    Set db=session.CurrentDatabase
    Dim acl As NotesACL
    Dim entry As NotesACLEntry
    Set acl = db.ACL
    Set entry = acl.GetEntry( session.UserName )


    If entry.IsRoleEnabled("[AL]") Then
    If Not entry.IsRoleEnabled( "[Problemstatus]" ) Then
    Call entry.EnableRole( "[Problemstatus]" )
    [color=0000FF]Call acl.save[/color]
    Call uidoc.FieldSetText("Problemstatus","angefordert")
    Call entry.DisableRole( "[Problemstatus]" )
    [color=0000FF]Call acl.save[/color]
    End If



    Bin nicht sicher, ob's dann funzt.
    Aber probieren kann man es doch...

  • Wie du sagst: das bedingt Managerrechte. Bin ich auch kein Freund von.
    Es gäbe zwar noch die Möglichkeit, dass der User einen vom Server oder mit einer Admin-ID unterzeichneten Agenten anschubst, der dann die ACL verbiegt, allerdings würde das das ACL-Log ganz schön 'zumüllen'.


    Möglichkeiten gibt es eine Menge, sauberes Anwendungsdesign wäre sinniger...

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hallo zusammen,


    Die user haben keine Managerrechte. Bin jetzt aber dazuübergegangen, ein Button einzufügen, den nur unsere Abteilungsleiter sehen(wieder mit einer Rolle) funktioniert aber. Bei dem zu änderndem Feld habe ich den Typ auf berechnet gesetzt. Kann zwar niemand mehr bearbeiten, macht auch nix, da dies eh nur von 4 Leuten geändert werden konnte. Die Rolle habe ich komplett aus dem Abschnitt entfernt.


    Vielen Dank für eure Tips und Anregungen.


    lapfandi