绑定到django组的访问控制列表

django-simple-acl的Python项目详细描述


将内置组和权限从代码中声明性地配置为静态访问控制列表。与
集成
django内置模型权限

特点:

  • 定义应始终存在的组的列表
  • 为每个组绑定一组对任何模型的crud权限

安装

  1. pip安装django groups acl
  2. '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
rest框架的使用

事实上,使用的权限是django的模型,因此可以将此包与任何其他包一起使用 与这些相结合。例如,要在drf视图集上利用这些权限,可以使用djangomodelpowpermissions 上课,你就准备好了:

fromrest_frameworkimportviewsetsfromrest_framework.permissionsimportDjangoModelPermissionsfrommyapp.modelsimportMyCoolModelfrommyapp.serializersimportMyCoolModelSerializerclassCoolModelViewSet(viewsets.ModelViewSet):queryset=MyCoolModel.objects.all()serializer_class=MyCoolModelSerializerpermission_classes=[DjangoModelPermissions]

此视图集将尊重您的ACL,因为权限位于数据库内部,并且是在启动时创建的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java随机填充2d数组   java运行时。getRuntime。带有长参数的exec(cmd)   java Minecraft无法放置自定义背景   java AChartEngine YAxis自定义标签区域边距和图表值为字符串?   泛型类的java类型安全错误   整数的java符号等价物。toBinaryString方法?   Java中数组列表的数组   java WebView应用程序在谷歌登录后显示空白屏幕   java从backback中删除特定片段   如果服务器不支持使用的协议,java JSSE是否实现回退?   java Sonarqube正在进行核心漏洞查找。如何解决   javajavax。jcr。UnsupportedPositionOperationException:testVersionable处的节点不可版本化   java在安卓中每隔X小时运行一次文件/函数,无需打开应用程序   java如何为磁盘持久性配置BigMemory?   java BufferWriter不转换383以上的整数   Java7交集类型:规范具体说明了什么?   Java:CollectionHow创建多列   java如何检测运算符的空白   java问题:在firebase中为导航栏中的第二个表单提交数据第一个表单工作正常。实际isse是连接Mainactivity中的另一个活动