我不确定这是不是一个错误,或者我只是遗漏了一些东西(虽然我已经解析了有关内联的文档),但是:
假设我有一个模型A.模型A是模型B的内联。用户U可以完全访问模型B,但只更改模型A的权限(因此,不添加,也不删除)。
但是,在编辑模型B时,用户U仍然可以在底部看到“添加另一个A”链接,尽管U没有为该模型添加权限。
怎么了?为什么这个链接会继续显示?我的逻辑说如果U没有添加A的权限,则链接不应再出现了。
另外,理想情况下,我想给U模型A只有视图权限(所以没有添加,删除或更改 - 只有视图),但我已经读到了(奇怪,如果你问我)哲学根据其中“如果你不信任你,只是拒绝他一起访问管理区域”。一种愚蠢的教义。
现在,我正在尝试通过仅使用更改权限保留U并将所有字段设置为只读来模拟此“仅查看权限”。但我认为这是一种愚蠢的方法,也可能导致像上面的权限问题......
像我这样的普通Django程序员如何实现仅查看权限,最重要的是我应该如何摆脱管理编辑表单底部的“添加另一个”链接?
提前致谢!
答案 0 :(得分:2)
如果我想要一个管理员内容的只读版本,我只需编写一些正常的Django视图并将其保留在管理员之外。
我不认为你所谈论的那种事情(允许改变一个对象而不是它的内联)确实得到了管理员的支持。不要误会我的意思:管理员非常灵活和有用,但并不打算为你做任何事情。
我认为你能够在管理员中拥有这么多控件的唯一方法就是不要内联A.
“如果你不信任你,只是拒绝他一起访问管理区域”。一种愚蠢的教义。
并非如此,当您认为管理员不打算具有所需的安全加固级别以保证细粒度级别的访问控制时。管理员中有很多很多地方,因为它具有开放性和可扩展性,可以潜伏(通常在用户编写的代码中),可以被坏人利用。这就是不受信任的用户应始终看到所有管理员网址返回404的原因。
无论如何,当访问控制要求具有细粒度时,一般(即django.contrib
)解决方案就不太可能适合。