基础Django模型,通过组添加访问控制到对象。
项目描述
它做什么
django-group-access根据组成员限制访问记录。它不管理更细粒度的权限,如编辑或删除。如果用户可以访问记录,则他们拥有由django auth权限定义的所有权限。
安装
将“django_group_access”添加到settings.py中的INSTALLED_APPS
集成和使用
示例:安装到单个模型并在视图中限制访问
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将获得access_groups,这是一个包含每个记录可访问组的ManyToManyField。
MyModel 将获得“所有者”属性,这是一个指向 django.contrib.auth.models.User 的 ForeignKey,用于确定记录的所有权。为了不使用“所有者”字段,请在调用 register() 时传递
owner=False
。
views.py
- def my_view(request)
records = MyModel.objects.accessible_by_user(request.user)
自动对 records 中模型实例的所有相关字段和反向关系进行过滤。
可以通过用户对“子”记录的访问权限来确定对“父”记录的访问权限。在以下示例中,如果您可以访问一个房间,您也可以访问它所在的房屋。
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)
用于访问控制的组模型是 AccessGroup。这与 django auth Group 分开,以提供灵活性。
公开记录模式
如果您希望默认将所有数据公开,并使用访问组来限制对单个记录的访问,请将以下内容添加到 settings.py 中
DGA_UNSHARED_RECORDS_ARE_PUBLIC = True
自动根据登录用户进行限制
将 'django_group_access.middleware.DjangoGroupAccessMiddleware' 添加到 settings.py 中的 MIDDLEWARE_CLASSES。所有受访问控制的模型都将根据当前登录用户进行过滤,这意味着您不需要在代码中调用 'accessible_by_user'。匿名用户将看不到任何记录。
中间件必须在 MIDDLEWARE_CLASSES 列表中 AuthenticationMiddleware 之后。
将模型注册为 'auto_filter=False' 将停止对该模型的自动过滤,这意味着您将不得不在代码中手动使用 'accessible_by_user'。
不受限制的记录访问
将模型注册为具有选项 'unrestricted_manager="manager_name"' 将在该模型上创建一个具有对所有记录无限制访问权限的管理器,即使您正在使用基于登录用户的自动限制。
示例
registration.register(MyModel, unrestricted_manager='all_objects')
all_records = MyModel.all_objects.all()
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。