class Listing(Master): ''' Member listing view. This demonstrates how to require a permission to view, and also how to obtain a list of annotated principals. ''' grok.require('logindemo.ViewMemberListing') def fieldNames(self): return (f for f in IUser) def members(self): pau = getUtility(IAuthentication) principals = pau['principals'] roster = [] for id in sorted(principals.keys()): # adapt the principals to IUser to get all fields user = IUser(principals[id]) fields = {} for field in IUser: fields[field] = getattr(user, field) roster.append(fields) return roster