| Issue: Before you let a user run an agent, you want to verify the user has the rights to run the agent by verifying a role.
 
 Solutions:
 There are several ways to check/verify this. Each does a piece of the pie.
 
 1. Set agent to run as AgentList or Schedule (Never). Then just hide button that runs the agent with the normal @IsMember formula code when applicable.
 
 2. Check for the role before running or in the agent.
 
 The easiest way is to check is to hide the button or link with formula:
 Dim aclcheckflag As Variant
 aclcheckflag =Evaluate({@IsMember("[admin]"; @UserRoles)})
 If (aclcheckflag (0)=1) Then
 ...
 End If
 
 
 Below is an LotusScript function w/o using an Evaluate:
 
 %REM
 Function ACLIsMember
 Description: Returns true if aclStr is member of db ACL
 %END REM
 Function ACLIsMember(db As NotesDatabase, userNm As String, roleNm As String) As Integer
 Dim roleFound As Integer
 Dim roles As Variant
 
 On Error GoTo FErrorHandler
 
 roleFound = 0
 
 If (db Is Nothing) Then
 ' return false
 ACLIsMember = roleFound
 Exit Function
 End If
 If Not (db.Isopen) Then
 ' verify is open/allowed access
 ACLIsMember = roleFound
 Exit Function
 End If
 
 roles = db.QueryAccessRoles( userNm )
 
 ForAll role In roles
 If (role = roleNm) Then
 roleFound = 1
 ACLIsMember = roleFound
 Exit Function
 End If
 End ForAll
 
 FExit:
 ACLIsMember = roleFound
 Exit Function
 FErrorHandler:
 ACLIsMember = roleFound
 Resume FExit
 End Function
 
 
 
 Better than using an equals, switch to Like in the LotusScript function:
 Someone in Notes.net posted this option of using like for the comparison. Still pass db.QueryAccessRoles(s.UserName) as vArray.
 
 Function isMember(vStr As String, vArray As Variant) As Boolean
 For x = 0 To Ubound(vArray)
 If vArray(x) Like vStr Then
 isMember = True
 Exit Function
 End If
 Next
 isMember = False
 End Function
 
 
 
 Another Version:
 (Obviously, the Like substitution can be made here, too.)
 
 Function LSIsmMemberAppRole(nm As String, rolenm As String) As Integer
 Dim s As New NotesSession
 Dim db As NotesDatabase				' this app
 Dim dbACL As NotesACL				' this app acl
 Dim dbACLE As NotesACLEntry		' entry in acl
 
 On Error Goto FErrorHandler
 
 LSIsmMemberAppRole = 0
 ' do checks
 If (nm = "" Or rolenm = "") Then
 Exit Function
 End If
 ' get acl entry, and check for roles
 Set db = s.CurrentDatabase
 Set dbAcl = db.ACL
 Set dbACLE = dbAcl.GetEntry( nm )
 Forall r In dbACLE.Roles
 If ( Cstr(r) Like rolenm ) Then
 ' found, return true = 1
 LSIsmMemberAppRole = 0
 Exit Function
 End If
 End Forall
 
 FExit:
 ' not in roles, if made it this far
 Exit Function
 FErrorHandler:
 Print "(LSIsMemberAppRole) Unexpected Error: " & Cstr(Err) & ", " & Error$ & ", line: " & Cstr(Erl) & "."
 Resume FExit
 End Function
 
 
 previous page
 
 
 |