Domino 9 und frühere Versionen > Entwicklung

Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....

(1/3) > >>

OCS:
Hallo,
der Wert von entry ist hier immer Nothing, obwohl das eigentlich garnicht sein kann.... kann sich jemmand nen reim darauf machen was ich da falsch machen??

Sub Entering(Source As Field)
Dim workspace As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim uidoc As NotesUIDocument
   Dim acl As NotesACL   
   Dim entry As NotesACLEntry
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   Set entry = acl.GetEntry( session.CommonUserName )
   If entry Is Nothing Then
      Msgbox "NIX"
      Call uidoc.GotoField( "DocText" )
      Exit Sub
   Else      
      If entry.IsRoleEnabled( "[Manager]" ) Then
         Msgbox "Gude"   
      Else
         Msgbox "Keine Berechtigung zum Ändern!!"
         Call uidoc.GotoField( "DocText" )         
      End If
   End If
End Sub


Gruß Björn

Raymond:
Hallo Björn

so wie ich dein Code interpretiere, möchtest du rausfinden ob jemand eine bestimmte Rolle hat oder nicht...

Das geht am Besten über @UserRoles. Da du das Ganze in LotusScript benötigst, könntest du untenstehende Funktion verwenden...

Gruss

Raymond

Function fnCheckRole( Byval vs_Role As String) As Integer
' -----------------------------------------------------
' INPUTS
' vs_Role : The role to be validated for a user
   
' RETURNS
' True : If the role is assigned to the current user
' False : If the role is not assigned to the current user
   
' USAGE
' e.g. : if fnCheckRole("[DbAdmin]") then ..........
' -----------------------------------------------------
   
   Dim lv_Roleslist As Variant
   
   fnCheckRole = False
' Gets all roles assigned to the current user in lv_Roleslist
   lv_Roleslist = Evaluate("@UserRoles")
' Converts the role to be checked to uppercase
   vs_Role = Ucase(vs_Role)
' Iterates through all roles in the lv_Roleslist
   Forall lv_Roles In lv_Roleslist
      If vs_Role = Ucase(lv_Roles) Then
' If role assigned matches the role to be checked then sets the function to true
         fnCheckRole = True
         Exit Forall
      End If
   End Forall
End Function

Driri:
CommonUserName gibt den gekürzten Namen zurück, in der ACL steht aber wohl der Abbreviated Name drin.

Erstell dir ein OBjekt vom Typ NotesName und schieß da session.UserName rein. Dann kannst Du mit NotesName.Abbreviated den Namen korrekt auslesen und dann solltest Du damit auch nen Treffer in der ACL bekommen.

koehlerbv:
Wobei das mit dem Prüfen von Namen in der ACL immer Primitiv-Murks ist, weil es die Verwendung von Gruppen verhindert.

Ich würde unbedingt dem Vorschlag von Raymond folgen.

Bernhard

koehlerbv:
Ich sehe gerade, dass Du in Deinem Code das uidoc nicht instantiierst.

Weiterhin: Warum arbeitest Du nicht mit zwei Feldern - eins editierbar, das andere berechnet zur Anzeige ? Je nach Rollen blendest Du das eine oder das andere ein. Das dürfte die zukünftigen User nicht so verwirren wie der verzweifelte Versuch, den Cursor in ein eigentlich ja bearbeitbares Feld zu bringen ...

Bernhard

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln