feat: lots of changes
This commit is contained in:
@@ -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)
|
||||
@@ -26,8 +26,10 @@ THIRD_PARTY_APPS = [
|
||||
]
|
||||
|
||||
PROJECT_APPS = [
|
||||
"frontend",
|
||||
"shop",
|
||||
"tpv",
|
||||
"users",
|
||||
]
|
||||
|
||||
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + PROJECT_APPS
|
||||
|
||||
@@ -7,4 +7,5 @@ urlpatterns = [
|
||||
path("api/v1/", include("config.api.v1.urls")),
|
||||
path("watchman", include("watchman.urls")),
|
||||
path("tpv/", include("tpv.urls", namespace="tpv")),
|
||||
path("auth/", include("users.urls", namespace="users")),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user