feat: lots of changes

This commit is contained in:
2024-05-05 00:04:51 +02:00
parent d5643bbf5f
commit d148cc9c61
32 changed files with 509 additions and 61 deletions
+36
View File
@@ -0,0 +1,36 @@
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)