14

我一直在探索 Django 的细节大约一个星期,并且喜欢我所看到的。但是,我遇到了一些.. 与细粒度控制 CRUD 接口权限相关的消极情绪。

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

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

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

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

更新二:

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

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

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

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

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

4

6 回答 6

8

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

这个话题已经出现过好几次了。尝试在 django+acl 上搜索。

随机抽样...

几年前有一个 Summer of Code 项目,但我不确定他们去哪里了。请参阅http://code.djangoproject.com/wiki/GenericAuthorization

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

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

...但是有零个文档。

祝你好运!

于 2008-10-25T23:49:42.063 回答
4

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

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

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

如果这对您来说还不够,配置文件插件为您提供了更多选项来定义“用户”及其能力、权限、角色、职责等。

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


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

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

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


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

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

于 2008-10-24T01:58:34.120 回答
3

ModelAdmin对象具有has_add_permission、和方法has_change_permission,可用于对登录用户可以查看和修改的内容强制执行权限 - 您可以创建一个子类,使用这些子类来强制执行您想要实现的任何权限并将所有模型注册到应用程序使用你的子类。has_delete_permissionquerysetadmin

但是,这一切都取决于您的权限系统将如何工作 - 您的细粒度权限的确切要求是什么?你越远离admin应用程序的设计目标,它需要做的工作就越多,但是其中有很多钩子可以用来实现你的自定义需求。这是Luke Plant 的博客文章,其中提供了一些无需深入挖掘即可进行微调的示例。

它绝对必须基于admin应用程序吗?通用视图ModelForms可以处理实现 CRUD 所涉及的许多繁琐的部分,所以要小心不要过于依赖定制admin- 从挂断admin应用程序以及它可以做什么和可以做什么开始几乎是 Django 的传统'不这样做,最初认为你永远不必再编写任何代码;)

于 2008-10-24T00:06:33.113 回答
2

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

于 2011-08-10T08:44:23.507 回答
0

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

它将行级权限添加到 django 的权限系统中。

于 2008-11-27T10:40:14.097 回答
0

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

于 2009-08-27T01:08:13.987 回答