Ищу трясогузку modeladmin PermissionHelper пример
В "wagtail_hooks.py" у меня есть код ниже. Как администратор трясогузки я могу видеть StudentModelAdmin, но как пользователь с ограниченным доступом к интерфейсу администратора я не могу.
Я хотел бы разрешить пользователям с правами администратора wagtail и специальным разрешением ниже доступ к администратору модели студента. Как мне создать класс "CourseRegisterPermission"?
from wagtail.contrib.modeladmin.options import (ModelAdmin, modeladmin_register)
from wagtail.wagtailcore import hooks
from .models import Participant
@hooks.register('register_permissions')
def view_course_registrations():
return Permission.objects.filter(codename="view_course_registrations")
class CourseRegisterPermission(PermissionHelper):
# how do I allow users with the permission to view course registrations
# to see the 'StudentModelAdmin" below?
class StudentModelAdmin(ModelAdmin):
model = Participant
menu_label = "Student Registrations"
menu_icon = "group"
search_fields = ('name', 'supervisor_name')
list_display = ('name', 'email')
list_filter = ('course',)
permission_helper_class = CourseRegisterPermission
Я пытался найти некоторые примеры трясогузки PermissionHelper, но не смог найти ни одного.
Любая подсказка будет оценена!
2 ответа
Вы можете использовать wagtail.contrib.modeladmin.helpers.PermissionHelper
или же wagtail.contrib.modeladmin.helpers.PagePermissionHelper
классы помощника разрешения из источников Wagtail в качестве примера. Смотрите методы как user_can_list
, user_can_create
, так далее.
Но... Вы уверены, что вам нужно определить свой собственный класс помощника разрешения? Мне кажется, что вы можете просто создать новую (или отредактировать существующую) группу в администраторе трясогузки и дать необходимые разрешения для вашего объекта. Participant
модель.
На моем скриншоте Programme
это модель, которой я управляю с помощью ModelAdmin.
Вы можете переопределить некоторые функции внутриCourseRegisterPermission
class CourseRegisterPermission(PermissionHelper):
def user_can_list(self, user):
"""
Return a boolean to indicate whether `user` is permitted to access the
list view for self.model
"""
# this is just an example
return user.role == "driver"
def user_can_delete_obj(self, user, obj):
"""
Return a boolean to indicate whether `user` is permitted to 'delete'
a specific `self.model` instance.
"""
perm_codename = self.get_perm_codename('delete')
if obj.status > 0:
return False
if not self.user_has_specific_permission(user, perm_codename):
return False
if user.id == obj.id:
# users may not delete themselves
return False
Вы также можете переопределить следующие функции:
-
def user_can_list(self, user):
-
def user_can_create(self, user):
-
def user_can_inspect_obj(self, user, obj):
-
def user_can_edit_obj(self, user, obj):
-
def user_can_delete_obj(self, user, obj):
-
def user_can_unpublish_obj(self, user, obj):
-
def user_can_copy_obj(self, user, obj):