django admin - групповые разрешения для редактирования или просмотра моделей - PullRequest
8 голосов
/ 06 декабря 2011

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

Например, я только что создал группу разработчиков, теперь я также создал модель Tickets с AdminModel, чтобы указать, как составлять список данных.

Мне бы хотелось, чтобы эта модель была видна только разработчикам и скрывалась друг от друга не в этой группе (например, фильтровать представление по группам). Я прочитал много документации, но не смог найти и понять, что нужно сделать, чтобы это работало.

В целях безопасности мне также необходимо проверять группы пользователей во время выполнения при добавлении-удалении объектов для конкретной модели (той, которую я скрыл для людей, не входящих в группу разработчиков), в противном случае для этого потребуется знать только URL-адрес. использовать модель: s

Это выглядит как простая задача, но, может быть, я что-то упустил ... какое-либо промежуточное программное обеспечение сторонних производителей или просто способ сделать это? Я также готов отредактировать административные представления, если это необходимо, но мне нужно знать, что с этим делать.

Спасибо: -)

1 Ответ

12 голосов
/ 06 декабря 2011

ModelAdmin имеет три метода работы с разрешениями пользователя: has_add_permission, has_change_permission и has_delete_permission.Все три должны возвращать логическое значение (True / False).

Так что вы можете сделать что-то вроде:

class TicketAdmin(admin.ModelAdmin):
    ...
    def has_add_permission(self, request):
        return request.user.groups.filter(name='Developers').exists()

    def has_change_permission(self, request, obj=None):
        return request.user.groups.filter(name='Developers').exists()

    def has_delete_permission(self, request, obj=None):
        return request.user.groups.filter(name='Developers').exists()

Когда False возвращается из одного из них, это результатв 403 запрещено.

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