Проблема с правилами Django - PullRequest
       4

Проблема с правилами Django

0 голосов
/ 05 февраля 2019

Я работаю с библиотекой правил из Django и не могу определить правила для конкретного меню.

Библиотека правил доступна там: библиотека правил

Я зарегистрирован как admin в моем веб-приложении.

У меня есть menus.py файл, подобный этому:

class AdminMenuItem(MenuItem):
    def check(self, request):
        return self.allow(request.user)

    @staticmethod
    def allow(user):
        return user.has_perm('app.access_admin_menu')

Menu.add_item('admin', MenuItem('Admin', '#admin', children=settings_children,
                            check=lambda request: AdminMenuItem.allow(request.user)))

settings_children = (
    ...
    AdminMenuItem("Manage Animals", reverse("animal-list-crud"), weight=10),
    AdminMenuItem("Statistics", reverse("statistics"), weight=140)
)

Тогда я определил в своем rules.py file:

from rules.permissions import add_perm
from rules.predicates import predicate


@predicate
def is_admin(user):
    if user.is_anonymous:
        return False
    return True if user.profile.type == 'ED' and user.profile.role == 'AD' else False

# Rules for admin_menu.
add_perm('app.access_admin_menu', is_admin)

# Rules for animal.
add_perm('app.view_animal', is_admin)
add_perm('app.add_animal', is_admin)
add_perm('app.change_animal', is_admin)
add_perm('app.delete_animal', is_admin)

Отлично работает для меню Animal (это часть CRUD).Но когда я пытаюсь получить доступ к части статистики (которая не является CRUD), у меня появляется ошибка 403 Access forbidden.

Я что-то забыл в своем коде?

Спасибо

1 Ответ

0 голосов
/ 05 февраля 2019

Я нашел решение.Вышеприведенный код хорош, но в моем коде main.py что-то пропущено.

class StatisticsView(PermissionRequiredMixin, View):
    """ Render the statistics page with a form to generate various stats """

    permission_required = 'app.access_statistics'
    ...

В моем классе я забыл атрибут PermissionRequiredMixin с permission_required = 'app.access_statistics'.Добавив оба элемента, он работает сейчас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...