63 lines
2.3 KiB
Python
63 lines
2.3 KiB
Python
from django.contrib.auth import get_user_model
|
|
|
|
from wagtail.permissions import ModelPermissionPolicy
|
|
from wagtail.snippets.models import register_snippet
|
|
from wagtail.snippets.views.snippets import SnippetViewSet
|
|
|
|
from mandelblog_content_guard.hooks import * # noqa: F401,F403
|
|
from mandelstudio.models import ContactMessage
|
|
|
|
|
|
class SuperuserOnlyPermissionPolicy(ModelPermissionPolicy):
|
|
def user_has_permission(self, user, action):
|
|
return user.is_active and user.is_superuser
|
|
|
|
def user_has_any_permission(self, user, actions):
|
|
return user.is_active and user.is_superuser
|
|
|
|
def user_has_permission_for_instance(self, user, action, instance):
|
|
return self.user_has_permission(user, action)
|
|
|
|
def user_has_any_permission_for_instance(self, user, actions, instance):
|
|
return self.user_has_any_permission(user, actions)
|
|
|
|
def instances_user_has_any_permission_for(self, user, actions):
|
|
if self.user_has_any_permission(user, actions):
|
|
return self.model._default_manager.all()
|
|
return self.model._default_manager.none()
|
|
|
|
def instances_user_has_permission_for(self, user, action):
|
|
return self.instances_user_has_any_permission_for(user, [action])
|
|
|
|
def users_with_any_permission(self, actions):
|
|
return get_user_model().objects.filter(is_active=True, is_superuser=True)
|
|
|
|
def users_with_permission(self, action):
|
|
return self.users_with_any_permission([action])
|
|
|
|
def users_with_any_permission_for_instance(self, actions, instance):
|
|
return self.users_with_any_permission(actions)
|
|
|
|
def users_with_permission_for_instance(self, action, instance):
|
|
return self.users_with_any_permission_for_instance([action], instance)
|
|
|
|
|
|
@register_snippet
|
|
class ContactMessageViewSet(SnippetViewSet):
|
|
model = ContactMessage
|
|
icon = "mail"
|
|
menu_label = "Contact messages"
|
|
menu_order = 220
|
|
# Keep it discoverable under the Snippets index (like other snippet models),
|
|
# instead of creating a separate top-level admin menu item.
|
|
add_to_admin_menu = False
|
|
|
|
list_display = ("created_at", "name", "email", "locale", "site")
|
|
list_filter = ("locale", "site")
|
|
search_fields = ("name", "email", "message", "phone_number")
|
|
ordering = ("-created_at",)
|
|
|
|
@property
|
|
def permission_policy(self):
|
|
return SuperuserOnlyPermissionPolicy(self.model)
|