Django / Wagtail: Как проверить, есть ли у пользователя права доступа к данной странице? - PullRequest
0 голосов
/ 12 января 2020

Я новичок в трясогузке, и это был потрясающий опыт!

Я пытаюсь решить следующую проблему: Пользователь может видеть список всех доступных дочерних страниц и, в зависимости от того, если он не имеет разрешений на доступ к каждой странице, на нем будет отображаться значок шкафчика, как на прикрепленном рисунке.

Каркас / эскиз

Я использую Личные страницы, доступные для пользователей в указанных c группах.

По сути, у меня есть следующий фрагмент кода:

{% for course in page.get_children %}
<h2> <a href="{{ course.url }} "> {{ course.title }}
    </a>
</h2>
{% endfor %}

Есть ли какое-либо свойство, которое я могу проверить, чтобы узнать, имеет ли пользователь или нет ' t разрешения для каждого course внутри моего l oop?

моей модели:

from django.db import models
from wagtail.core.models import Page

# Create your models here.
class CoursePage(Page):
    """
    A Page...
    """

    description = models.TextField(
        help_text='Text to describe the course',
        blank=True)

    subpage_types = ['course_module.ModulePage']


class ModulePage(Page):
    description = models.TextField(
        help_text='Text to describe the module',
        blank=True)


    subpage_types = ['lesson.LessonPage']

1 Ответ

0 голосов
/ 17 января 2020

Вам понадобится объект запроса. Вот один из подходов: проверьте каждый модуль на предмет ограничений на просмотр в get_context и добавьте список модулей и полномочий в контекст.

class CoursePage(Page):
    def get_context(self, request, *args, **kwargs):
        context = super().get_context(request, *args, **kwargs)
        modules_list = []
        for module in self.get_children():
            restrictions = module.get_view_restrictions()
            auth = all(restriction.accept_request(request)
                       for restriction in restrictions)
            modules_list.append((module, auth))
        context['modules_list'] = modules_list

        return context

В своем шаблоне вы можете использовать флаг авторизации, чтобы определить, должен ли отображаться значок блокировки.

...