Django内联用户权限+只读 - 权限问题

9 投票
1 回答
2165 浏览
提问于 2025-04-15 22:51

我不太确定这是个bug还是我理解错了(虽然我已经看过关于内联的文档),但是:

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

然而,当用户U在编辑模型B时,底部仍然能看到“添加另一个A”的链接,尽管U并没有添加这个模型的权限。

这是什么情况呢?为什么这个链接还在?我觉得如果U没有添加A的权限,那这个链接就不应该出现。

另外,理想情况下,我想给U只看模型A的权限(也就是说,不能添加、删除或修改,只能查看),但我听说过一种(我觉得很奇怪)哲学,认为“如果你不信任U,那就干脆不给他管理区域的访问权限”。这听起来有点傻。

现在,我试图通过只给U修改权限并把所有字段设置为只读来模拟这种“仅查看权限”。但我觉得这方法有点傻,而且可能会引发像上面提到的权限问题……

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

提前谢谢你!

1 个回答

2

如果我想要一个只读的管理界面,我可以写一些普通的Django视图,把它们放在管理界面之外。

我觉得你说的那种情况(允许对一个对象进行修改,但不允许修改它的内嵌内容)其实在管理界面里并不太支持。别误会,管理界面非常灵活和实用,但它并不是为了帮你做所有事情而设计的。

我认为,如果你想在管理界面里有这么多控制,唯一的办法就是不把A的内容放在内嵌里。

“如果你不信任U,那就完全不给他访问管理区域的权限。”这听起来有点傻。

其实并不是这么简单,因为管理界面并没有足够的安全措施来确保细粒度的访问控制。由于管理界面的开放和可扩展性,里面有很多地方可能会隐藏漏洞(通常是用户自己写的代码),这些漏洞可能会被坏人利用。因此,不可信的用户应该始终看到所有管理界面的链接返回404错误。

总之,当访问控制要求非常细致时,通常很难找到一个通用的解决方案(比如 django.contrib)来满足这些需求。

撰写回答