我一直在探索Django的细节大约一周,就像我看到的那样。但是,我对CRUD接口的权限进行了细粒度的控制,从而产生了一些消极性。
我写的是Intranet客户端管理网络应用程序。该组织大约有6层,我需要根据层限制对客户端组的访问。不断扩大。我有一个相当好的想法,我将如何做到这一点,但我不确定我是否能够很好地将它集成到预先构建的管理界面。
我完全没有Django开发,否则我可能会更好地了解这是否有效。如果生成的管理界面对这个项目没用,我可能不会使用Django - 但就像我说的那样,很大程度上依赖于细粒度的自定义权限。
让Django让我构建自定义权限/规则并将其无缝集成到管理CRUD界面中吗?
更新一:我想使用管理员应用程序来最小化生成CRUD接口的重复,所以我认为这是必须的。
更新二:
我想描述这个项目所需的权限。
客户可以属于一个或多个“商店”。全职员工应该只能在他们的商店编辑客户(即使他们属于另一家商店)。但是,他们不应该能够在另一家商店看到/编辑客户。临时工应该只能根据客户所在的商店查看客户(或者如果商店用户登录的商店 - 更有可能)。
他们上面的管理层需要能够看到他们管理的商店的所有员工,仅此而已。
高级管理层应该能够编辑所有员工并授予他们自己的权限。
阅读django文档后,它表示您不能(自动)为组的子集设置权限。只有整个团体。为此目的模拟自己的权限是否容易?
答案 0 :(得分:8)
如果我正确地阅读了更新的要求,我认为Django现有的auth系统就不够了。听起来你需要一个完整的ACL系统。
这个问题多次出现过。在django + acl上尝试使用Google搜索。
随机抽样......
几年前有一个Summer of Code项目,但我不确定他们到底在哪里。见http://code.djangoproject.com/wiki/GenericAuthorization
djngoproject.org上有一张可能很有趣的新票:
dumpz.org上有一些有趣的代码片段:
......但是没有文档。
祝你好运!答案 1 :(得分:4)
Django权限系统完全统治。每个模型都有一组默认权限。您也可以为模型添加新权限。
每个用户都有一组权限以及组成员身份。个人用户可以拥有个人权限。他们从群组成员资格中继承权限。
您的视图函数(和模板)可以在您需要使用的任何粒度级别轻松检查是否存在这些权限。
如果这对您来说还不够,那么Profile附加组件为您提供了更多选项来定义“用户”及其功能,权限,角色,职责等。
如果这还不够,您可以定义自己的身份验证方案。
重要的是不要尝试定义作为用户实际子集的组,而不是随便定义的标题或角色。您永远不需要“为组的子集设置权限”。你需要有更小的团体。围绕人群定义的群组。
Django的默认权限是模型访问权限,而不是模型中的行访问权限。另一方面,您的问题是几个模型中的行子集:客户端,商店,员工,经理。
在这些项目中,您需要一组基本的FK,以及一些用于对行进行子集化的过滤器。使用默认管理页面可能无法执行此操作。您可能需要自己的管理员版本才能使用专门的过滤器。
如果你不能使用Django权限系统,你应该重新考虑你的用例。严重。
[然而,Django-REST接口完全是另一种野兽,需要一些照顾和喂养。]
答案 2 :(得分:3)
ModelAdmin个对象具有has_add_permission
,has_change_permission
,has_delete_permission
和queryset
方法,可用于强制执行登录用户可以看到的权限并修改 - 您可以创建一个子类,使用这些子类来强制执行您想要实现的任何权限,并使用您的子类使用admin
应用程序注册所有模型。
但是,这一切都取决于您的权限系统的确切运作方式 - 您的细粒度权限的具体要求是什么?你越远离admin
应用程序设计要做的事情,它所需的工作就越多,但是你可以使用很多钩子来实现你的自定义要求。这是一个blog post from Luke Plant,它给出了一些你可以做的微调的例子,而不必深入挖掘。
它绝对必须基于admin
应用程序吗? Generic views和ModelForms可以处理实现CRUD所涉及的大量繁琐工作,因此be wary过于依赖自定义admin
- 这几乎是Django的传统首先要挂在admin
应用程序上以及它可以做什么和不能做什么,最初认为你永远不必再写任何代码;)
答案 3 :(得分:2)
从django 1.2开始,支持行级权限,django-guardian可以非常直观地处理。
答案 4 :(得分:0)
您可能还想查看粒度权限monkeypatch: http://code.google.com/p/django-granular-permissions/
它为django的权限系统添加了行级权限。
答案 5 :(得分:0)
我刚刚找到http://bitbucket.org/jezdez/django-authority/,看起来很有希望。