基本django模型,通过组向对象添加访问控制。

django-group-access的Python项目详细描述


它的功能

django group access基于组成员身份限制对记录的访问。 它不管理更细粒度的权限,如编辑或删除。 如果用户有权访问记录,则他们拥有定义的所有权限 由django验证权限。

安装

将“django_group_access”添加到settings.py中已安装的_应用程序中

集成和使用

示例:安装到单个模型并在视图中限制访问

models.py

from django.db import models from django_group_access import registration

class MyModel(models.Model):
name = models.CharField(max_length=24)

registration.register(MyModel)

MyModel将获得一个包含 有权访问每个记录的组。

MyModel还将获得“owner”,它是 django.contrib.auth.models.user,用于确定所有权 记录在案。要不使用和“所有者”字段,请通过:

owner=False

调用register()。

views.py

def my_view(request):
records = MyModel.objects.accessible_by_user(request.user)

中模型实例的所有相关字段和反向关系 记录将自动为同一用户筛选。

对“父”记录的访问可以由用户拥有的访问权限决定 “孩子”的记录。在下面的示例中,如果您可以访问一个房间 你可以进入它出现的房子。

from django.db import models from django_group_access import registration

class House(models.Model):
address = models.CharField(max_length=128)
class Room(models.Model):
house = models.ForeignKey(House) name = models.CharField(max_length=32)

registration.register(Room) registration.register(House, control_relation=’room’)

houses = House.objects.accessible_by_user(user_object)

用于访问控制的组模型是access group。这是 与django auth组分离以获得灵活性。

共享记录

obj = MyModel.objects.accessible_by_user(user_object)[0]

group_i_want_to_share_with = AccessGroup.objects.get(name=’Friends’)

obj.access_groups.add(group_i_want_to_share_with)

obj将对“朋友”访问组的成员可见。

为了便于在组之间共享数据,accessgroup有一个名为 自动共享组。这是记录所属访问组的列表 将自动与组共享。

公共记录模式

如果要在默认情况下公开所有数据,并使用访问组 要限制对单个记录的访问,请将以下内容添加到settings.py

DGA_UNSHARED_RECORDS_ARE_PUBLIC = True

基于登录用户自动限制

将“django_group_access.middleware.djangoGroupAccessMiddleware”添加到 settings.py中的中间件类。所有访问控制模型都将被筛选 基于当前登录的用户,这意味着您不必调用 代码中的“可由用户访问”。匿名用户将看不到任何记录。

中间件必须在列表中的authenticationmiddleware之后 中间件类的。

使用“auto_filter=false”注册模型将停止自动 对该模型进行筛选,这意味着您必须使用 代码中的“可由用户访问”。

访问不受限制的记录

使用“unrestricted_manager=”manager_name“选项注册模型将 在该模型上创建具有对所有记录的无限制访问权限的管理器,即使 您正在使用基于登录用户的自动限制。

示例:

registration.register(MyModel, unrestricted_manager=’all_objects’)

all_records = MyModel.all_objects.all()

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

推荐PyPI第三方库


热门话题
在reducer中迭代自定义可写组件时出现java问题   属性文件中属性的java命名约定   任务链关闭的java Executor服务   java从Eclipse中的字段生成多个构造函数   java通过继承读取Json   java在不知道密钥的情况下解析json   java camel cxf如何在电子邮件中发送soap请求响应   java程序似乎跳过了if语句的一部分,在移回正确位置之前先移到else语句   测试简单的Java加密/解密inputFileName不存在   java从Jenkins REST API获取所有作业的所有构建的构建细节   java基本包装器和静态“类型”类对象   在WebSphere8.5上部署java代码   java对象相等(对象引用“=”)   java MongoDB整型字段到枚举的转换   每次我重新导入gradle时,IntelliJ都会不断重置Java设置   类型使用键或索引从Java中的数据类型检索值   在Java的列表接口中需要listIterator()和iterator()是什么?