From 0ad50630f288b16bf3655f5b1bc5c459032ede7f Mon Sep 17 00:00:00 2001 From: stephenrauch Date: Fri, 24 Apr 2015 11:02:18 -0700 Subject: [PATCH] Fix ldap_auth for NoSQL databases Unroll query with join to two queries when working with DB's which don't support joins. --- gluon/contrib/login_methods/ldap_auth.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/gluon/contrib/login_methods/ldap_auth.py b/gluon/contrib/login_methods/ldap_auth.py index 65f2cfb9..aa0690f8 100644 --- a/gluon/contrib/login_methods/ldap_auth.py +++ b/gluon/contrib/login_methods/ldap_auth.py @@ -521,9 +521,17 @@ def ldap_auth(server='ldap', port=None, logging.error( 'There is no username or email for %s!' % username) raise - db_group_search = db((db.auth_membership.user_id == db_user_id) & - (db.auth_user.id == db.auth_membership.user_id) & - (db.auth_group.id == db.auth_membership.group_id)) + if not db.can_join(): + # no joins on NoSQL databases, perform two queries + db_group_search = db(db.auth_membership.user_id == db_user_id) + group_ids = [x.group_id for x in db_group_search.select( + db.auth_membership.group_id, distinct=True)] + db_group_search = db(db.auth_group.id == group_ids) + else: + db_group_search = db( + (db.auth_membership.user_id == db_user_id) & + (db.auth_user.id == db.auth_membership.user_id) & + (db.auth_group.id == db.auth_membership.group_id)) db_groups_of_the_user = list() db_group_id = dict()