Django Разрешения - то же кодовое имя, проблема с другим именем - PullRequest
1 голос
/ 10 июля 2020

Если у меня есть отдельные модели, каждая с соответствующими разрешениями, но с одним и тем же кодовым именем, есть ли способ различить guish между ними при проверке, есть ли у пользователя разрешения каждого человека тип модели?

Например, у меня есть две модели, каждая с настраиваемыми разрешениями, такими как:

class Meta:
        permissions = (
            ('can_execute', 'Can execute class1'),
        )

class Meta:
        permissions = (
            ('can_execute', 'Can execute class2'),
        )

тогда, при проверке, есть ли у пользователя эти разрешения, например

user.has_perm('app.can_execute')

нет возможности различить guish между ними? Должен ли я всегда быть таким, чтобы кодовые имена были разными для каждой отдельной модели?

1 Ответ

0 голосов
/ 10 июля 2020

Django разрешения по умолчанию для каждой модели, и они имеют суффикс имени модели, как задокументировано

, это гарантирует, что четыре разрешения по умолчанию - добавление, изменение, удаление и view - создаются для каждой модели Django, определенной в одном из установленных приложений.

Предполагая, что у вас есть приложение с app_label foo и моделью с именем Bar, для проверки базовых c разрешений вы должны использовать:

add: user.has_perm('foo.add_bar')
change: user.has_perm('foo.change_bar')
delete: user.has_perm('foo.delete_bar')
view: user.has_perm('foo.view_bar')

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

class Meta:
        permissions = (
            ('can_execute_class2', 'Can execute'),
        )
...