The core of our parts website is created by Domino web agents. These agents are written in lotusscript and Several of the items are shown or hidden base on user roles.
Since there wasn't a function capable of checking roles for groups I wrote verifyUserRole. You pass in the Role, Session, and Canonical User name and it returns true or false.
As a test copy this code into an agent and call it via url from your web browser.
Sub Initialize Dim s As New NotesSession Dim db As NotesDatabase Dim acl As NotesACL Dim entry As NotesACLEntry Dim doc As notesdocument Dim nn As notesname Set doc = s.documentcontext Set nn = New notesname(doc.remote_user(0)) role$ = "[com]" roleIsEnabled = verifyUserRole (role$, s, nn.Canonical) If roleIsEnabled Then Print role$ & " is enabled for user " & nn.Abbreviated Else Print role$ & " isn't enabled for user " & nn.Abbreviated End If End Sub Function verifyUserRole (role As String, s As NotesSession, user_Name As String) As Variant Dim acl As NotesACL Dim entry As NotesACLEntry Dim currdb As NotesDatabase Dim GroupsView As NotesView Dim groupdoc As NotesDocument Set currdb = s.CurrentDatabase Dim NAdb As New NotesDatabase(currdb.Server,"names.nsf") Set acl = currdb.ACL Set GroupsView = NAdb.GetView("Groups") roleIsEnabled = False 'Check to see if the user is listed directly in the ACL Set entry = acl.GetEntry( user_Name ) If Not entry Is Nothing Then If entry.Isroleenabled(role$) Then verifyUserRole = True ' print "User role" & role & " is enabled for " & user_Name Exit Function End If Else 'User is not listed get first entry in the ACL to look for groups Set entry = acl.GetFirstEntry While Not entry Is Nothing ' print "entry " & entry.name & " <br>" If entry.Isgroup Then ' print entry.name & " is a group<br>" If entry.IsRoleEnabled(role)Then ' print "The " & role & " role is enabled for " & user_Name & " in group " & entry.name & "<br>" 'Find group in the Address Book Set groupdoc = GroupsView.GetDocumentByKey(entry.name) If Not groupdoc Is Nothing Then 'Roll through members and check for current user Forall names In groupdoc.members If user_Name = names Then ' print "verified <br>" verifyUserRole =True 'role is enabled for user Exit Function Exit Forall End If End Forall End If End If End If 'Get next ACL entry Set entry = acl.GetNextEntry(entry) Wend End If End Function
This was first published in July 2002