You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

Какие темы охватывает гайд?

  • Работа с правами доступа в Django
  • Работа с правами доступа в Django Rest Framework
  • Паттерны написания кода для прав доступа
  • Защита эндпоинтов правами доступа
  • Фильтрация Queryset'ов на основе прав доступа

Какие темы НЕ охватывает гайд?

  • Написание моделей/эндпоинтов/других частей бэкенда
  • Работу с правами доступа на фронтенде
  • Все, что связано с фронтендом

Работа с правами доступа в Django

Вся логика работы прав доступа сосредоточена в модуле django.contrib.auth через модель Permission и методы для работы с ней.

Модель Permission имеет Many-to-many связь с моделью Group (через поле permissions в модели Group), это позволяет назначать конкретные права группам.

Модель Permission имеет Many-to-many связь с моделью User (через поле user_permissions в модели User), это позволяет назначать конкретные права отдельным пользователям.

Наличие права X у пользователя/группы Y фактически означает наличие соответствующей записи в табличке ManyToMany-связей.

Права доступа - это строчки в таблице прав доступа. Назначение права доступа пользователю - это соответствие между строкой в таблице прав доступа, и строкой в таблице юзеров (или групп) 


(warning) Напрямую с правами доступа как моделями и/или записями в БД мы не работаем. Для работы с правами доступа в Django предусмотрен специальный "синтаксический сахар".

(warning) Права доступа всегда привязаны к какой-либо сущности.


Например: у нас есть сущность "Общежитие". Логически подумав, мы пришли к тому, что хотим:

1) Скрывать общежитие для некоторых пользователей

2) Давать некоторым пользователям управлять общежитием (например, изменять контент находящихся в нём помещений).

(warning) Любое право доступа обязательно характеризуется словами "для некоторых пользователей". Если такого требования нет - достаточно флажка в модели (если хотим скрывать или показывать общежитие всем пользователям одновременно - то для этого достаточно поля "is_hidden" типа BooleanField в модели общежития).



Работа с правами доступа в Django rest framework

Паттерны написания кода для прав доступа

Защита эндпоинтов правами доступа

Фильтрация Queryset'ов на основе прав доступа


  • No labels