3

我的项目中有一个设置应用程序,该应用程序使用的数据库表中的每条记录都代表特定的设置。重要的是设置必须始终保持一致,因此我正在寻找保护它们免受管理面板用户或错误代码意外删除的方法。

此功能的另一种情况可能是 - 错误消息存储在数据库中,可在管理站点中编辑,或者为网站用户提供电子邮件消息模板。

我想到的可能解决方案:
- 将每个设置存储为表格列或多列,因此表格将按列扩展,而不是按行扩展。优点 - 简单、可靠,缺点 - 丑陋
- 数据库端解决方案。
- 实现某种权限系统,该系统将根据对象所有权控制对 CRUD 操作的访问,例如 Linux 中的文件系统权限。优点 - 不那么丑陋,从 DB 中抽象出来,缺点 - 我还不知道如何为 Django 简单而优雅地实现它。

有人有更好的想法吗?

4

3 回答 3

2

简短的回答是:如果您不希望某人具有某些数据库能力,请不要授予他们。您似乎认为有管理面板超级用户和其他所有人。

Django 允许对用户、权限、授权甚至管理面板权限进行更细粒度的控制。确实,当文档做得如此出色时,此处无法详细说明。

于 2013-10-04T13:16:45.673 回答
0

在 Django 中,没有真正的内置方法(我知道)可以防止“意外删除”。如果您使用的是管理员,他们会在您想要删除有助于遏制潜在问题的记录时提供确认页面。正如@msw 提到的,用户身份验证系统旨在帮助您强制执行权限,但如果个人具有适当的权限,则不会防止意外删除......

...另一种策略是完全防止数据库上的删除(在 Web 应用程序级别)。您可以通过标记和过滤任何“已删除”记录给您的用户,从用户的角度给出删除的“错觉”。这样,恢复信息就像切换/重置记录中的标志一样简单。您还必须覆盖正确的删除信号

于 2013-10-04T13:53:46.127 回答
0

我不确定我是否完全理解了你的问题,但它是这样的:

我看到了两种保护模型被删除的方法:

  • 覆盖该delete()方法,并使其检查一组强制执行所需一致性的规则。例如,如果其中一个一致性规则失败,您将引发异常以进行正确处理。
  • 另一种是通过自动化,也就是权限。您可以管理用户必须删除特定模型的权限,如本答案中所述。

我注意到 Django 默认权限 API 不支持特定对象的权限,只支持应用于模型的权限。但是,有提供此功能的第三方应用程序,例如这个

于 2013-10-04T14:23:49.250 回答