37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
from typing import Dict
|
|
|
|
|
|
class CRUDPermissionsMixin:
|
|
view_permission_codes: tuple = ()
|
|
create_permission_codes: tuple = ()
|
|
destroy_permission_codes: tuple = ()
|
|
update_permission_codes: tuple = ()
|
|
action_permissions: Dict[str, tuple] = {}
|
|
|
|
def get_default_action_permissions(self):
|
|
return {
|
|
"list": self.view_permission_codes,
|
|
"retrieve": self.view_permission_codes,
|
|
"create": self.create_permission_codes,
|
|
"update": self.update_permission_codes,
|
|
"partial_update": self.update_permission_codes,
|
|
"destroy": self.destroy_permission_codes,
|
|
}
|
|
|
|
def has_perm_for_action(self, request, action) -> bool:
|
|
default_action_permissions = self.get_default_action_permissions()
|
|
action_permissions = {**default_action_permissions, **self.action_permissions}
|
|
perms = action_permissions.get(action, ())
|
|
return request.user.has_perms(perms)
|
|
|
|
def has_permission(self, request, view):
|
|
user = request.user
|
|
|
|
if user.is_superuser:
|
|
return True
|
|
|
|
if not user.is_staff:
|
|
return False
|
|
|
|
return self.has_perm_for_action(request=request, action=view.action)
|