基本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组分离以获得灵活性。
公共记录模式
如果要在默认情况下公开所有数据,并使用访问组 要限制对单个记录的访问,请将以下内容添加到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()