Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Управление правами доступа к объектам в Django

Управление правами доступа к объектам в Django

Сергей Лихобабин (Руководитель подразделения разработчиков Отдела внутренней информационной разработки Mail.Ru Group)

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

- права доступа на уровне объектов, зачем они нужны, какие решения существуют, основные проблемы
- наше решение и его возможности, примеры из жизни
- ограничения доступа в иерархиях объектов различных типов

Moscow Python Meetup

September 04, 2014
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Какую проблему решаем Почему не готовое решение Как устроено наше

    решение Как интегрировать в существующее приложение
  2. Чего нам не хватало Назначение прав на уровне объекта Видимость

    объектов с помощью прав Права в иерархиях объектов Несколько моделей-групп
  3. Наше решение Хорошая производительность на списках объектов Простая интеграция Замещает

    стандартную систему прав r e q u e s t . u s e r . h a s _ p e r m ( ' s o m e _ a p p . e d i t _ s o m e t h i n g ' , s o m e _ o b j e c t )
  4. Иерархии видимости объектов Ограничение распространяется на все объекты вниз по

    иерархии Изменение ограничения затрагивает все объекты иерархии Ограничения на поддерево иерархии
  5. "Плюшки" для интеграции и миграции Mixin и Queryset для ограниченных

    объектов Mixin для модели пользователя и групп
  6. Queryset для ограниченных объектов Фильтрация видимых объектов без потери queryset

    Фильтрация требует не более двух join (к сожалению в обход ORM) Фильтрация queryset по наличию указанного права на объект Автоматическая миграция со стандартной системы прав
  7. c l a s s C o m m e

    n t ( R e s t r i c t e d ) : c o n t e n t _ t y p e = m o d e l s . F o r e i g n K e y ( C o n t e n t T y p e ) o b j e c t _ i d = m o d e l s . P o s i t i v e I n t e g e r F i e l d ( ) c o n t e n t _ o b j e c t = g e n e r i c . G e n e r i c F o r e i g n K e y ( ' c o n t e n t _ t y p e ' , ' o b j e c t _ i d ' ) o b j e c t s = R e s t r i c t e d M a n a g e r ( ) d e f g e t _ p a r e n t _ o b j e c t ( s e l f ) : r e t u r n s e l f . c o n t e n t _ o b j e c t
  8. Примеры работы с ограничениями C o m m e n

    t . o b j e c t s . v i s i b l e ( r e q u e s t . u s e r ) . f i l t e r ( o b j e c t _ i d = s o m e _ o b j e c t . i d ) c o m m e n t . r e s t r i c t ( )
  9. Mixin для модели пользователя и новая модель для группы u

    s e r . p e r m i s s i o n s . a d d ( s o m e _ p e r m i s s i o n , s o m e _ o b j e c t ) u s e r . g r o u p s . a d d ( g r o u p ) g r o u p . p e r m i s s i o n s . a d d ( s o m e _ p e r m i s s i o n , s o m e _ o b j e c t )