1111from utilities .permissions import permission_is_exempt , resolve_permission , resolve_permission_ct
1212
1313
14- class ObjectPermissionBackend ( ModelBackend ):
14+ class ObjectPermissionMixin ( ):
1515
1616 def get_all_permissions (self , user_obj , obj = None ):
1717 if not user_obj .is_active or user_obj .is_anonymous :
@@ -20,13 +20,16 @@ def get_all_permissions(self, user_obj, obj=None):
2020 user_obj ._object_perm_cache = self .get_object_permissions (user_obj )
2121 return user_obj ._object_perm_cache
2222
23+ def get_permission_filter (self , user_obj ):
24+ return Q (users = user_obj ) | Q (groups__user = user_obj )
25+
2326 def get_object_permissions (self , user_obj ):
2427 """
2528 Return all permissions granted to the user by an ObjectPermission.
2629 """
2730 # Retrieve all assigned and enabled ObjectPermissions
2831 object_permissions = ObjectPermission .objects .filter (
29- Q ( users = user_obj ) | Q ( groups__user = user_obj ),
32+ self . get_permission_filter ( user_obj ),
3033 enabled = True
3134 ).prefetch_related ('object_types' )
3235
@@ -86,6 +89,10 @@ def has_perm(self, user_obj, perm, obj=None):
8689 return model .objects .filter (constraints , pk = obj .pk ).exists ()
8790
8891
92+ class ObjectPermissionBackend (ObjectPermissionMixin , ModelBackend ):
93+ pass
94+
95+
8996class RemoteUserBackend (_RemoteUserBackend ):
9097 """
9198 Custom implementation of Django's RemoteUserBackend which provides configuration hooks for basic customization.
@@ -163,8 +170,15 @@ def __new__(cls, *args, **kwargs):
163170 "Required parameter AUTH_LDAP_SERVER_URI is missing from ldap_config.py."
164171 )
165172
166- # Create a new instance of django-auth-ldap's LDAPBackend
167- obj = LDAPBackend_ ()
173+ # Create a new instance of django-auth-ldap's LDAPBackend with our own ObjectPermissions
174+ class NBLDAPBackend (ObjectPermissionMixin , LDAPBackend_ ):
175+ def get_permission_filter (self , user_obj ):
176+ permission_filter = Q (users = user_obj ) | Q (groups__user = user_obj )
177+ if self .settings .FIND_GROUP_PERMS :
178+ permission_filter = permission_filter | Q (groups__name__in = user_obj .ldap_user .group_names )
179+ return permission_filter
180+
181+ obj = NBLDAPBackend ()
168182
169183 # Read LDAP configuration parameters from ldap_config.py instead of settings.py
170184 settings = LDAPSettings ()
0 commit comments