2010-05-18 106 views
9

我不知道这是否是一个错误或我只是失去了一些东西(虽然我已经解析关于内联的文档),但:Django的内联用户权限+视图 - 权限问题

比方说,我有一个模型A.模型A是模型B的内联。用户U对模型B具有完全访问权限,但只是将权限更改为模型A(所以不添加,也不删除)。

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

怎么了?为什么该链接继续显示?我的逻辑说,如果U没有权限添加A,则该链接不应再出现。另外,理想情况下,我想给予U模型A的唯一视图权利(所以不需要添加,删除或更改 - 只能查看),但是我已经阅读了关于这个(奇怪的,如果你问我)哲学“如果你不信任你,只要他拒绝他们进入管理区域”。一种愚蠢的教义。

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

像我这样的平均Django程序员如何实现仅查看权限,最重要的是我该如何摆脱管理员编辑表单底部的“添加其他A”链接?

在此先感谢!

+0

这里有个大问题:你如何定义这个“用户X对对象Y具有只读访问权限”? perms框架更适合您编写自己的代码来检查和验证用户对某些对象的操作。请阅读[permission_required] [1]装饰器以了解更多信息。管理员本身不会奇迹般地猜测用户X不能创建Y对象,并随后删除“添加Y”选项。 [1]:http://docs.djangoproject.com/en/1.2/topics/auth/#django.contrib.auth.decorators。permission_required – dguaraglia 2010-06-04 12:17:46

+0

如果您有一些样本模型和modeladmin类,阅读该问题会更容易 – 2010-06-25 23:18:22

回答

2

如果我想要管理员中的内容的只读版本,我只需编写一些正常的Django视图并将其保留在管理员之外。

我不认为你正在谈论的事情(允许对对象进行更改,而不是内联对象)真的受到管理员的支持。不要误解我的意思:管理员非常灵活有用,但并不是要为你做所有事情。

我看你能有在管理这么多控制的唯一办法就是不要内嵌A.

“如果你不信任U,只是拒绝他进入管理区的所有一起”。一种愚蠢的教义。

不是真的,当你考虑到管理员不打算有安全强化,以保证访问控制是细粒度水平所需的水平。由于管理员的开放性和可扩展性,管理员中有许多地方可能存在bug(通常是用户编写的代码),这些bug可能会被不良行为者利用。这就是为什么不受信任的用户应该总是看到所有管理URL返回404.

无论如何,当访问控制要求细化时,一般(即django.contrib)解决方案将不太适合。