绑定到django组的访问控制列表
django-simple-acl的Python项目详细描述
- 将内置组和权限从代码中声明性地配置为静态访问控制列表。与 集成
- django内置模型权限
特点:
- 定义应始终存在的组的列表
- 为每个组绑定一组对任何模型的crud权限
安装
- pip安装django groups acl
- 将'simpleacls'添加到已安装的应用程序中
INSTALLED_APPS=[...'simpleacls.apps.SimpleAclsConfig',...]
注意:一定要加上'SimpleCals.apps.SimpleCalsConfig'对你安装的应用程序,而不仅仅是简单的
配置
^{pr2}$用法
使用django简单acl,您可以在应用程序中定义所需的用户组,每个组都具有哪些CRUD权限 用户和应用程序启动时,将创建组并链接模型权限。在
一切都在启动时发生,最终状态由代码决定,这使得配置、更新变得简单 并在多个部署中进行复制。在
- 要设置django简单ACL,必须在设置.py文件。条目为:
- groups:表示组名称的字符串列表
- acls:acls对象的路径列表
acls是一个路径列表,例如中间件的路径,格式为“路径到模块.objectinsidetemodule“的目标。目标在这里 使ACL与它们应用的模型位于同一个模块中。在
可以在测试源中找到一个简单的\u ACL config示例:
SIMPLE_ACLS={"groups":[DRIVER,SHOP_EMPLOYEE,SALESMAN,ACCOUNTANT,MANAGER],"acls":["testautoload.acls.ACLS"]}
其中DRIVER、SHOP_EMPLOYEE、sales、ACCOUNTANT和MANAGER实际上是组名(以字符串形式)。在
acl声明结构本身可以如下所示:
frommyapp.modelsimportMyCoolModelfrommyapp.groupsimportANONYMOUS,USER,ADMINfromsimpleacls.aclsimportC,R,U,DACLS={MyCoolModel:{ANONYMOUS:{R}USER:{C,R,U},ADMIN:{C,R,U,D}}}
换句话说,acl声明是模型、组和权限的映射。在
C、R、U、D是对某个模型的创建、读取、更新和删除权限。在
模型本身是ACLS映射中的键(不是他的名字,实际的模型类)。在
在这个模型中,我们定义了一个组的映射,并为每个组定义了可用的权限。在
权限是一组C、R、U、D
组密钥实际上是组名(如果您有一个名为admin的组,它将是“admin”)。但你可能会 希望在项目或枚举中使用这些常量。在
如果省略模型的组,则该组将对该模型没有权限。在
如果在同一模型上为同一组定义两组权限,则它们将被合并并删除重复项。 (这意味着如果定义了两个权限集,则生成的权限集将是这两个权限集的最高组合)
有问题
- If the groups are not created and the permissions not linked on startup, maje sure you added ‘simpleacls.apps.SimpleAclsConfig’ to your installed apps
- If you omit the SIMPLE_ACLS settings or make a typo in the name, no permission will be loaded
- If you need to define an empty set of permissions use set() as {} is an empty dictionary.
- If the acl path in SIMPLE_ACLS[“acl”] is not valid (module does not exist or does not have the specified object). Then your application won’t start (but you should see a warning about it).
- In order for permissions to be loaded inside your tests, you need to use the AclTestMixin (see the test section for detail).
测试
在测试期间,组和权限可能没有正确设置(但它们将在应用程序启动时设置)。到 为了避免混淆,并确保所有设置都正确,应该在integration/end2end中使用AclTestMixin 测验。下面是一个如何:
fromdjango.testimportTestCasefromsimpleacls.testutilsimportAclTestMxinclassMyTest(AclTestMixin,TestCase):deftest_something(self):some=Group.objects.get(name="some_groups")# this group and it's permissions were created
事实上,使用的权限是django的模型,因此可以将此包与任何其他包一起使用 与这些相结合。例如,要在drf视图集上利用这些权限,可以使用djangomodelpowpermissions 上课,你就准备好了:
fromrest_frameworkimportviewsetsfromrest_framework.permissionsimportDjangoModelPermissionsfrommyapp.modelsimportMyCoolModelfrommyapp.serializersimportMyCoolModelSerializerclassCoolModelViewSet(viewsets.ModelViewSet):queryset=MyCoolModel.objects.all()serializer_class=MyCoolModelSerializerpermission_classes=[DjangoModelPermissions]
此视图集将尊重您的ACL,因为权限位于数据库内部,并且是在启动时创建的。在
- 项目
标签: