Domino 9 und frühere Versionen > Entwicklung
Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
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