跳转到主要内容

基础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 分开,以提供灵活性。

共享记录

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 将对 'Friends' 访问组成员可见。

为了方便在组之间共享数据,AccessGroup 有一个名为 auto_share_groups 的属性。这是一个 AccessGroup 列表,组拥有的记录将自动与这些组共享。

公开记录模式

如果您希望默认将所有数据公开,并使用访问组来限制对单个记录的访问,请将以下内容添加到 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()

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

django-group-access-1.1.17.tar.gz (17.8 kB 查看散列)

上传于

由以下支持