Untitled
unknown
plain_text
a year ago
2.5 kB
15
Indexable
all_users = []
ldap_user_ids = set()
# 1️⃣ Bulk fetch LDAP users
ldap_plugin = acl_users.get('pasldap')
if ldap_plugin:
conn = ldap_plugin._getConnection()
base_dn = ldap_plugin.getProperty('users_base')
search_filter = "(objectClass=person)" # adjust to your LDAP filter
attrs = ['cn', 'mail', 'distinguishedName', 'sAMAccountName']
try:
result = conn.search_s(base_dn, ldap.SCOPE_SUBTREE, search_filter, attrs)
except ldap.LDAPError:
result = []
# 2️⃣ Fetch portal_memberdata properties for all LDAP users
memberdata_tool = portal.portal_memberdata
for dn, entry in result:
if not entry:
continue
user_id = entry.get('sAMAccountName', [b''])[0].decode()
if not user_id:
continue
ldap_user_ids.add(user_id)
# Fetch cargo/telefono from portal_memberdata (ZODB)
cargo = memberdata_tool.getProperty(user_id, 'cargo', '')
telefono = memberdata_tool.getProperty(user_id, 'telefono', '')
all_users.append({
'id': user_id,
'fullname': entry.get('cn', [b''])[0].decode(),
'email': entry.get('mail', [b''])[0].decode(),
'area': parse_area(entry.get('distinguishedName', [b''])[0].decode()),
'cargo': cargo,
'telefono': telefono,
'pluginid': 'pasldap',
'portrait': f'/++api++/portrait/{user_id}',
})
# 3️⃣ Merge local source_users not in LDAP
local_plugin = acl_users.get('source_users')
if local_plugin:
local_users = local_plugin.enumerateUsers(id=None, exact_match=False)
for user in local_users:
user_id = user.get('id')
if user_id in ldap_user_ids:
continue # skip users already in LDAP
all_users.append({
'id': user_id,
'fullname': user.get('fullname', ''),
'email': user.get('email', ''),
'area': user.get('area', ''),
'cargo': user.get('cargo', ''),
'telefono': user.get('telefono', ''),
'pluginid': 'source_users',
'portrait': f'/++api++/portrait/{user_id}',
})
return all_usersEditor is loading...
Leave a Comment