我已经探索Django的细节大约一周了,我喜欢我所看到的。但是我发现了一些..。与CRUD接口权限的细粒度控制相关的负性。
我正在写的是一个内部网客户端管理web应用程序。该组织大约有6层,我需要根据层限制对客户组的访问。不断扩大。我有一个相当好的想法,我将如何做到这一点,但不确定我是否能够很好地集成到预先构建的管理界面。
我完全没有做过Django开发,否则我可能会有一个更好的想法,知道这是否可以工作。如果生成的管理界面对这个项目没有用处,我可能不会使用Django -但正如我所说的,它严重依赖于细粒度的自定义权限。
Django会让我构建自定义权限/规则,并将其无缝地集成到管理CRUD界面中吗?
更新一:我想使用管理应用程序来最大限度地减少生成CRUD界面的重复,所以我认为它是必须的。
更新二:
我想描述这个项目所需的权限。
一个客户端可以属于一个或多个“商店”。全职员工应该只能编辑他们商店中的客户(即使他们属于另一个商店)。但是,他们不应该能够查看/编辑其他商店中的客户端。临时员工应该只能根据他们被登记的商店来查看客户(或者如果临时员工作为商店用户登录-更有可能)。
他们上面的管理层需要能够看到他们管理的商店的所有员工,仅此而已。
高级管理人员应该能够编辑所有员工并授予低于他们自己的权限。
在阅读django文档后,它显示您不能(自动地)为组的子集设置权限。只有整个团队。为此目的模拟您自己的权限是否足够简单?
发布于 2008-10-25 23:49:42
如果我没看错您更新的需求,我认为Django现有的身份验证系统是不够的。听起来你需要一个全功能的ACL系统。
这个话题已经提过很多次了。试着在django+acl上搜索一下。
随机抽样。
几年前有一个代码之夏项目,但我不确定他们到哪里去了。请参阅http://code.djangoproject.com/wiki/GenericAuthorization
在djngoproject.org上有一张新的门票,这可能很有趣:
在dumpz.org上有一些有趣的代码片段:
..。但是这里没有任何文档。
祝好运!
发布于 2008-10-24 01:58:34
Django许可系统是绝对的规则。每个模型都有一组默认的权限。您还可以向模型添加新的权限。
每个用户都有一组权限和组成员身份。单个用户可以拥有单独的权限。并且他们从他们的组成员那里继承权限。
您的视图函数(和模板)可以在您需要使用的任何粒度轻松检查是否存在这些权限。
如果这对你来说还不够,Profile add-on为你提供了更多的选项来定义“用户”及其能力、权限、角色、职责等。
如果这对您来说还不够,您可以定义自己的身份验证方案。
重要的是不要尝试定义用户的实际子集,而不是随意定义的头衔或角色。您永远不需要“为组的子集设置权限”。你需要有更小的团队。围绕人员子集定义的组。
Django的默认权限是模型访问权限,而不是模型中的行访问权限。另一方面,您的问题涉及几个模型中的行子集: Client、Store、Employee、Manager。
在这些项目中,您将需要一组基本的FK,并需要一些过滤器来设置行的子集。对于默认的管理页面,您可能无法做到这一点。您可能需要自己的admin版本才能使用专门的过滤器。
如果你不能使用Django权限系统做到这一点,你应该重新考虑你的用例。我是认真的。
然而,Django-REST接口完全是另一种野兽,需要一些照顾和喂养。
发布于 2008-10-24 00:06:33
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 --从专注于admin应用程序开始,以及它可以做什么和不能做什么,这几乎是Django的传统,最初的想法是你再也不用写任何代码了;)
https://stackoverflow.com/questions/232008
复制相似问题