Skip to content

Commit

Permalink
♻️Rename groups_and_permissions to access_rules
Browse files Browse the repository at this point in the history
  • Loading branch information
yezyilomo committed May 9, 2020
1 parent ad81bd9 commit 213bf66
Showing 1 changed file with 28 additions and 23 deletions.
51 changes: 28 additions & 23 deletions drf_guard/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,19 @@ def has_permission(self, request, view):
# Separate retrive URL(This will be handled in has_object_permission)
return True

# Get a mapping of methods -> required group.
required_groups_mapping = getattr(view, "groups_and_permissions", {})
# Get a mapping of methods -> access_rules
access_rules = getattr(view, "access_rules", {})

# Determine the required groups for this particular request method.
required_groups = required_groups_mapping.get(request.method, {})
# Get access rules for this particular request method.
http_method_access_rules = access_rules.get(request.method, {})

if view.action == 'list':
# Get required groups for list action
required_groups = required_groups.get('list', {'groups': None, 'permissions': None})
# Get required access rules for list action
http_method_access_rules = http_method_access_rules.get(
view.action, {'groups': None, 'permissions': None}
)

required_groups = required_groups.get('groups', None)
required_groups = http_method_access_rules.get('groups', None)

# Return True if the user has all the required groups or is staff.
return self.is_in_required_groups(request.user, required_groups)
Expand All @@ -55,17 +57,19 @@ def has_object_permission(self, request, view, obj):
# Separate list URL(This will be handled in has_permission)
return True

# Get a mapping of methods -> required group.
required_groups_mapping = getattr(view, "groups_and_permissions", {})
# Get a mapping of methods -> access rules
access_rules = getattr(view, "access_rules", {})

# Determine the required groups for this particular request method.
required_groups = required_groups_mapping.get(request.method, {})
# Get access rules for this particular request method.
http_method_access_rules = access_rules.get(request.method, {})

if view.action == 'retrieve':
# Get required groups for retrieve action
required_groups = required_groups.get('retrieve', {'groups': None, 'permissions': None})
# Get access rules for retrieve action
http_method_access_rules = http_method_access_rules.get(
view.action, {'groups': None, 'permissions': None}
)

required_groups = required_groups.get('groups', None)
required_groups = http_method_access_rules.get('groups', None)

# Return True if the user has all the required groups or is staff.
return self.is_in_required_groups(request.user, required_groups)
Expand Down Expand Up @@ -109,18 +113,19 @@ def has_required_permissions(cls, permissions, *args):

@staticmethod
def get_permissions(request, view):
# Get a mapping of methods -> required group.
required_permissions_mapping = getattr(view, "groups_and_permissions", {})
# Get a mapping of methods -> access rules
access_rules = getattr(view, "access_rules", {})

# Determine the required groups for this particular request method.
required_permissions = required_permissions_mapping.get(request.method, {})
# Get access rules for this particular request method.
http_method_access_rules = access_rules.get(request.method, {})

if view.action == 'retrieve':
required_permissions = required_permissions.get('retrieve', {'groups': None, 'permissions': None})
elif view.action == 'list':
required_permissions = required_permissions.get('list', {'groups': None, 'permissions': None})
if view.action in ['list', 'retrieve']:
# Get access rules for list/retrieve action
http_method_access_rules = http_method_access_rules.get(
view.action, {'groups': None, 'permissions': None}
)

return required_permissions.get('permissions', None)
return http_method_access_rules.get('permissions', None)

def has_permission(self, request, view):
required_permissions = self.get_permissions(request, view)
Expand Down

0 comments on commit 213bf66

Please sign in to comment.