Untitled
unknown
plain_text
a year ago
2.0 kB
17
Indexable
from plone import api
from zope.component import adapter
from Products.Five import BrowserView
from Products.PluggableAuthService.interfaces.plugins import IUserEnumerationPlugin
from zope.globalrequest import getRequest
class CustomSearchUsersView(BrowserView):
"""
Override PAS search view to fetch all users with properties
from LDAP and local Plone in bulk.
"""
def searchusers(self):
portal = api.portal.get()
request = getRequest()
acl_users = portal.acl_users
all_users = []
# 1️⃣ Fetch local Plone users
local_users = {u.getId(): u for u in acl_users.getUserObjects()}
for user_id, user_obj in local_users.items():
all_users.append({
'id': user_id,
'fullname': getattr(user_obj, 'fullname', ''),
'email': getattr(user_obj, 'email', ''),
'area': getattr(user_obj, 'area', ''),
'cargo': getattr(user_obj, 'cargo', ''),
'telefono': getattr(user_obj, 'telefono', ''),
'pluginid': 'source_users',
'portrait': f'/++api++/portrait/{user_id}',
})
# 2️⃣ Fetch LDAP users directly (bulk query)
ldap_plugin = acl_users.get('pasldap')
if ldap_plugin is not None:
# This is Plone PAS LDAP plugin specific
# get all users in bulk
for user_obj in ldap_plugin.getUserObjects():
user_id = user_obj.getId()
if user_id in local_users:
continue # already added
all_users.append({
'id': user_id,
'fullname': getattr(user_obj, 'fullname', ''),
'email': getattr(user_obj, 'email', ''),
'area': getattr(user_obj, 'area', ''),
'cargo': getattr(user_obj, 'cargo', ''),
'telefono': getattr(user_obj, 'telefono', ''),
'pluginid': 'pasldap',
'portrait': f'/++api++/portrait/{user_id}',
})
return all_users
Editor is loading...
Leave a Comment