我已经探索 Django 的细节大约一周了,并且喜欢我所看到的。不过我遇到过一些..与 CRUD 接口权限的细粒度控制相关的负面影响。

我正在编写的是一个内联网客户端管理网络应用程序。该组织大约有 6 层,我需要根据层限制对客户组的访问。不断扩大。我非常清楚如何做到这一点,但不确定是否能够将其很好地集成到预构建的管理界面中。

我已经完成了绝对零的 Django 开发,否则我可能会更好地了解这是否可行。如果生成的管理界面对这个项目没有用,我可能不会使用 Django - 但就像我说的,严重依赖细粒度的自定义权限。

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

更新一:我想使用管理应用程序来最大程度地减少生成 CRUD 接口的重复,所以是的,我认为它是必须的。

更新二:

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

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

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

高级管理层应该能够编辑所有员工并授予其下级权限。

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

有帮助吗?

解决方案

如果我正确地阅读了您更新的要求,我认为 Django 现有的身份验证系统就足够了。听起来您需要一个完整的 ACL 系统。

这个话题已经出现过很多次了。尝试用谷歌搜索 django+acl。

随机抽样...

几年前有一个“代码之夏”项目,但我不确定他们进展到了什么程度。看 http://code.djangoproject.com/wiki/GenericAuthorization

djngoproject.org 上有一张可能有趣的新票:

dumpz.org 上有一些有趣的代码片段:

...但文档为零。

祝你好运!

其他提示

Django权限系统完全统治。每个模型都有一组默认权限。您也可以为模型添加新权限。

每个用户都有一组权限以及组成员身份。个人用户可以拥有个人权限。他们从群组成员资格中继承权限。

您的视图函数(和模板)可以在您需要使用的任何粒度级别轻松检查是否存在这些权限。

如果这对您来说还不够,那么Profile插件会为您提供更多用于定义“用户”的选项。及其能力,权限,角色,职责等。

如果这还不够,您可以定义自己的身份验证方案。


重要的是不要尝试定义作为用户实际子集的组,而不是随便定义的标题或角色。您永远不需要“为组的子集设置权限”。你需要有更小的团体。围绕人群定义的群组。

Django的默认权限是模型访问权限,而不是模型中的行访问权限。另一方面,您的问题是几个模型中的行子集:客户端,商店,员工,经理。

在这些项目中,您需要一组基本的FK,以及一些用于对行进行子集化的过滤器。使用默认管理页面可能无法执行此操作。您可能需要自己的管理员版本才能使用专门的过滤器。


如果你不能使用Django权限系统,你应该重新考虑你的用例。严重。

[然而,Django-REST接口完全是另一种野兽,需要一些照顾和喂养。]

ModelAdmin 对象有 has_add_permission has_change_permission has_delete_permission queryset 方法,可用于围绕登录用户强制执行权限可以查看和修改 - 您可以创建一个子类,使用这些子类强制执行您想要实现的任何权限,并使用您的子类使用 admin 应用程序注册所有模型。

但是,这一切都取决于您的权限系统的确切运作方式 - 您的细粒度权限的具体要求是什么?你越远离 admin 应用程序的设计目标,它所需的工作就越多,但是你可以使用很多钩子来实现自定义需求。这是来自Luke工厂的博客文章,其中提供了一些细节示例调整你可以做而不必深入挖掘。

它绝对必须基于 admin 应用程序吗? 通用视图 ModelForms 可以处理很多繁琐的内容。实施CRUD,因此要小心谨慎过于依赖自定义管理员 - 它几乎是一个Django传统,首先要挂在 admin 应用程序上,它能做什么,不能做什么,最初认为你永远不必再写任何代码;)

从django 1.2开始,支持行级权限, django-guardian 非常直观地处理。

您可能还想查看粒度权限monkeypatch: http://code.google.com/p/django-granular-permissions/

它为django的权限系统添加了行级权限。

我刚刚找到 http://bitbucket.org/jezdez/django-authority/ ,看起来很有希望。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top