2013-10-04 2 views
2

У меня есть приложение настроек внутри моего проекта, и каждая запись в таблице DB, которую использует это приложение, представляет собой конкретную настройку. И важно, чтобы настройки всегда были согласованными, поэтому я ищу способ защитить их от случайного удаления пользователями административной панели или с помощью багги-кода.Как защитить объекты от удаления в Django?

Другие случаи для этой функции могут быть: сообщения об ошибках, хранящиеся в БД, и доступные для редактирования на админ-сайте или шаблоны для сообщений электронной почты для пользователей веб-сайта.

Возможные решения, которые я имею в виду:
- Храните каждый параметр в виде столбца таблицы или нескольких столбцов, поэтому таблица будет расширяться по столбцам, а не по строкам. Плюсы - простые, надежные, минус - уродливые
- Решение на стороне БД.
- Реализация какой-либо системы разрешений, которая будет контролировать доступ к CRUD-операциям на основе владения объектами, таких как разрешения файловой системы в Linux. Плюсы - менее уродливые, абстрактные от БД, Минусы - я еще не знаю, как сделать легкую и элегантную реализацию его для Django.

У кого-нибудь есть идеи?

ответ

0

Я не уверен, что я полностью понял ваш вопрос, но здесь идет:

Я вижу два способа защиты модели для удаления:

  • переопределять метод delete(), и сделать это проверьте набор правил, обеспечивающих требуемую согласованность. Например. если одно из правил согласования выходит из строя, вы создаете исключение для правильной обработки.
  • Другое через авторизованную, а также permissions. Вы можете управлять разрешениями пользователям, которые должны удалить определенные модели, как описано в this answer.

Я заметил, что API разрешений Django по умолчанию не поддерживает разрешения конкретного объекта, а только разрешения, применяемые к моделям. Тем не менее, есть сторонние приложения, которые предоставляют это, например, this one.

2

Короткий ответ: если вы не хотите, чтобы кто-то имел определенные возможности базы данных, они не предоставляют их. Похоже, вы думаете, что есть суперпользователи административной панели и все остальные.

Django позволяет гораздо больше fine grained control over Users, Permissions, Authorization, and even Admin Panel привилегий. В самом деле, слишком много контроля, чтобы разрабатывать здесь, когда документация делает такую ​​хорошую работу.

+0

Что делать, если администратор технологически неграмотен (не только pythonistas использует веб-сайты)? Или, если во время разворота некоторые данные станут непоследовательными, это может привести к ухудшению функциональности. –

+0

Я не хочу быть пренебрежительным, но очень сложно кодировать социальные проблемы, такие как «некомпетентность администратора». Такие проблемы чрезвычайно устойчивы к техническим решениям. – msw

+1

«Взломать» для этого будет что-то вроде примечания к клиенту: «Я даю вам привилегии суперпользователя по вашему запросу. Имейте в виду, что это дает вам возможность подключить систему, которую я построил для вас, Sicromoft может «Ответственность за ущерб, который вы причиняете своей собственной системе». Я уверен, что юрист сделает это более красивым, чем я. – msw

0

В Django нет реального встроенного способа (что я знаю), который предотвращает «случайное удаление». Если вы используете администратора, они предоставляют страницы подтверждения, когда вы хотите удалить запись, которая может помочь ограничить потенциальную проблему. Как отметил @msw, система аутентификации пользователей предназначена для обеспечения прав доступа, но не предотвратит случайное удаление, если у человека есть правильное разрешение для начала ...

... альтернативной стратегией было бы предотвратить удалений в базе данных полностью (на уровне веб-приложения). Вы можете дать «иллюзию» удаления с точки зрения пользователя, помещая и отфильтровывая любые «удаленные» записи вашему пользователю. Таким образом, восстановление информации было бы таким же простым, как переключение/сброс флага в записи. Вам также придется переопределить deletion signals.

+0

Альтернативная стратегия (хотя и умная) кажется на самом деле пугающей: «Но я удалил эту запись !? ! »« Нет, это похоже только, что вы удалили его вам, я вижу, все в порядке. "Argh!" (± 0) – msw

+0

Это потенциальная проблема, если пользователи системы знали о деталях реализации. Я думаю, что в долгосрочной перспективе вы найдете его приветливой функцией. Представьте себе, что другие проблемы, с которыми он одновременно сталкивается (т. Е. Недовольный сотрудник, который работает с их разрешениями, удаляет все, что может за день до их выхода). Это не должно быть страшнее, чем система резервного копирования файлов, которая хранит копию файла, даже если она удалена в резервной копии системы. –

Смежные вопросы