Django会成为基于权限的网络应用程序的不错选择吗?

时间:2008-10-23 23:50:16

标签: python django permissions

我一直在探索Django的细节大约一周,就像我看到的那样。但是,我对CRUD接口的权限进行了细粒度的控制,从而产生了一些消极性。

我写的是Intranet客户端管理网络应用程序。该组织大约有6层,我需要根据层限制对客户端组的访问。不断扩大。我有一个相当好的想法,我将如何做到这一点,但我不确定我是否能够很好地将它集成到预先构建的管理界面。

我完全没有Django开发,否则我可能会更好地了解这是否有效。如果生成的管理界面对这个项目没用,我可能不会使用Django - 但就像我说的那样,很大程度上依赖于细粒度的自定义权限。

让Django让我构建自定义权限/规则并将其无缝集成到管理CRUD界面中吗?

更新一:我想使用管理员应用程序来最小化生成CRUD接口的重复,所以我认为这是必须的。

更新二:

我想描述这个项目所需的权限。

客户可以属于一个或多个“商店”。全职员工应该只能在他们的商店编辑客户(即使他们属于另一家商店)。但是,他们不应该能够在另一家商店看到/编辑客户。临时工应该只能根据客户所在的商店查看客户(或者如果商店用户登录的商店 - 更有可能)。

他们上面的管理层需要能够看到他们管理的商店的所有员工,仅此而已。

高级管理层应该能够编辑所有员工并授予他们自己的权限。

阅读django文档后,它表示您不能(自动)为组的子集设置权限。只有整个团体。为此目的模拟自己的权限是否容易?

6 个答案:

答案 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_permissionhas_change_permissionhas_delete_permissionqueryset方法,可用于强制执行登录用户可以看到的权限并修改 - 您可以创建一个子类,使用这些子类来强制执行您想要实现的任何权限,并使用您的子类使用admin应用程序注册所有模型。

但是,这一切都取决于您的权限系统的确切运作方式 - 您的细粒度权限的具体要求是什么?你越远离admin应用程序设计要做的事情,它所需的工作就越多,但是你可以使用很多钩子来实现你的自定义要求。这是一个blog post from Luke Plant,它给出了一些你可以做的微调的例子,而不必深入挖掘。

它绝对必须基于admin应用程序吗? Generic viewsModelForms可以处理实现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/,看起来很有希望。