Пользовательские группы Django и пользовательские разрешения - PullRequest
1 голос
/ 19 февраля 2011

Я создаю CMS и теперь сталкиваюсь с какой-то проблемой, мне нужен ваш совет.У меня есть несколько различных модулей (приложений), которые я могу определить для них настраиваемое разрешение - в модели я определяю настраиваемые разрешения, такие как «view_store», «edit_store», «delete_store» и так далее.А затем я определил разные группы пользователей (я хочу иметь контроль доступа пользователей на основе групп) - admin, editor, vip, user.

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

Действие initcms выполняется после syncdb, поэтому все модели находятся в БД (информация о разрешениях такжеконечно).

У меня есть кое-что в голове ... Если это хороший путь или у вас есть лучший?Позвольте мне описать мое: я хочу дать, например, для пользователя vip все разрешения от всех моделей (для которых это разрешение определено) на «view_ *».Это означает, что VIP может просматривать все.У меня есть идея при инициализации базы данных просто захватить все записи (все разрешения), который соответствует шаблону "LIKE view_%", а затем добавить их все в разрешения группы.

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

1 Ответ

1 голос
/ 19 февраля 2011

Одним из возможных решений является использование Django Signals , которое может запускаться до или после вызова метода сохранения модели, или после или до того, как произойдет любое действие M2M, после syncdb и т. Д. выберите подходящий сигнал, который вам больше подходит, а затем вызовите функцию, которая проверяет соответствующие разрешения, и добавьте или удалите любые, если это необходимо ...

...