我的项目中有一个设置应用程序,此应用程序使用的数据库表中的每个记录代表特定设置。 并且设置始终必须保持一致非常重要,因此我正在寻找方法来保护它们免受管理员用户或错误代码的意外删除。
此功能的另一种情况可能是 - 存储在数据库中的错误消息,可在管理站点中进行编辑,或者用于网站用户的电子邮件消息的模板。
我想到的可能的解决方案:
- 将每个设置存储为表列或多列,因此表将按列顺序扩展,而不是按行扩展。优点 - 简单,可靠,简洁
- DB端解决方案。
- 实现某种权限系统,该系统将根据对象所有权控制对CRUD操作的访问,例如Linux中的文件系统权限。优点 - 不那么难看,抽象来自DB,Cons - 我还不知道如何为Django轻松优雅地实现它。
有没有人有更好的想法?
答案 0 :(得分:2)
简短的回答是:如果您不希望某人拥有某些数据库功能,请不要授予他们。您似乎认为有管理员超级用户和其他所有人。
Django允许更多fine grained control over Users, Permissions, Authorization, and even Admin Panel个权限。实际上,当文档做得很好时,要在此处详细说明。
答案 1 :(得分:0)
在Django中,没有真正的内置方式(我知道)可以防止“意外删除”。如果您使用的是管理员,则只要您想删除可以帮助解决潜在问题的记录,他们就会提供确认页面。正如@msw所提到的,用户身份验证系统旨在帮助您强制执行权限,但如果个人拥有适当的权限,则不会阻止意外删除......
......另一种策略是完全防止数据库删除(在Web应用程序级别)。您可以通过标记并过滤掉用户的任何“已删除”记录,从用户的角度给出删除的“错觉”。这样,恢复信息就像切换/重置记录中的标志一样简单。您还必须覆盖正确的deletion signals。
答案 2 :(得分:0)
我不确定我是否完全理解你的问题,但在这里:
我看到两种保护模型被删除的方法:
delete()
方法,并检查一组强制执行所需一致性的规则。例如。如果其中一个一致性规则失败,则引发异常以便妥善处理。我注意到Django默认权限API不支持特定对象的权限,只有权限应用于模型。但是,有第三方应用提供此功能,例如this one。