9

我不确定这是一个错误还是我只是遗漏了一些东西(尽管我已经解析了有关内联的文档),但是:

假设我有一个模型 A。模型 A 是模型 B 的内联。用户 U 对模型 B 具有完全访问权限,但只能更改模型 A 的权限(因此,不能添加,也不能删除)。

但是,在编辑模型 B 时,用户 U 仍然可以在底部看到“添加另一个 A”链接,尽管 U 尚未为相应模型添加权限。

怎么了?为什么这个链接一直显示?我的逻辑是,如果 U 没有添加 A 的权限,则链接不应再出现。

另外,理想情况下,我想只授予 U 对模型 A 的查看权限(因此没有添加、删除或更改 - 仅查看),但我已经阅读了关于该(奇怪,如果你问我)哲学根据“如果你不信任 U,就一起拒绝他访问管理区域”。一种愚蠢的学说。

现在,我正在尝试通过让 U 只保留更改权限并将所有字段设置为只读来模拟这种“仅查看权限”。但我认为这是一种愚蠢的方法,也可能导致上述权限问题......

像我这样的普通 Django 程序员如何获得仅查看权限,最重要的是,我应该如何摆脱管理编辑表单底部的“添加另一个 A”链接?

提前致谢!

4

1 回答 1

2

如果我想要管理员中的只读版本,我只需编写一些普通的 Django 视图并将它们排除在管理员之外。

我不认为管理员真正支持您所说的那种事情(允许更改对象但不允许更改其内联)。不要误会我的意思:管理员非常灵活和有用,但它并不打算为您做所有事情。

我看到您能够在管理员中拥有这么多控制权的唯一方法是不内联 A。

“如果你不信任 U,就一起拒绝他访问管理区域”。一种愚蠢的学说。

并非如此,当您认为管理员不打算具有所需的安全强化级别来保证细粒度级别的访问控制时。由于其开放和可扩展的特性,管理员中有很多很多地方可能潜伏(通常在用户编写的代码中)可能被不良行为者利用的错误。这就是为什么不受信任的用户应该总是看到所有管理员 URL 返回 404。

无论如何,当访问控制要求如此细粒度时,通用(即django.contrib)解决方案不太可能适合。

于 2010-06-22T03:31:05.593 回答