Django Rest模型权限

2023-12-23

我正在使用 Django 2.1 和 djangorestframework 3.9.2。我希望能够通过 Django 管理界面控制对 Django 模型对象的 REST 操作的访问,最好使用用户权限。例如,只有对模型对象 Foo 具有读取权限的用户才应该能够在我的 REST API 中看到 Foo。

I read the docs https://www.django-rest-framework.org/api-guide/permissions/看来我也许可以用Django模型权限 https://www.django-rest-framework.org/api-guide/permissions/#djangomodelpermissions or Django对象权限 https://www.django-rest-framework.org/api-guide/permissions/#djangoobjectpermissions.

但是,当我清除数据库中的所有用户权限并将 DEFAULT_PERMISSIONS_CLASS 设置为 DjangoModelPermissions 或 DjangoObjectPermissions 时,我仍然能够看到 REST API 中的内容。这意味着缺乏权限并不会阻止我看到我希望的对象。

设置示例:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.DjangoModelPermissions',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
}

对象视图示例:

from rest_framework import routers, serializers, viewsets
from .models import Example

class ExampleSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Example
        fields = '__all__'

class ExampleViewSet(viewsets.ModelViewSet):
    queryset = Example.objects.all()
    serializer_class = ExampleSerializer

router = routers.DefaultRouter()
router.register(r'examples', ExampleViewSet)

建议?


DjangoModelPermissions 仅强制执行数据修改的权限规则(例如POST , PUT , PATCH and DELETE请求),但不强制执行数据查看的权限规则。

要限制数据查看,您可以添加自定义查看权限,并子类化Django模型权限使用该权限,如docs https://www.django-rest-framework.org/api-guide/permissions/#djangomodelpermissions

EDIT:

使用 Django 2.1,view添加模型权限。所以这可能会得到支持Django模型权限在未来的版本中,但在那之前,您可以尝试像这样子类化 DjangoModelPermissions 以添加对视图权限的检查:

class DjangoModelPermissionsWithRead(DjangoModelPermissions):
    perms_map = {
        'GET': ['%(app_label)s.view_%(model_name)s'],
        'OPTIONS': [],
        'HEAD': [],
        'POST': ['%(app_label)s.add_%(model_name)s'],
        'PUT': ['%(app_label)s.change_%(model_name)s'],
        'PATCH': ['%(app_label)s.change_%(model_name)s'],
        'DELETE': ['%(app_label)s.delete_%(model_name)s'],
    }

EDIT 2: 有提交功能请求以支持此功能 https://github.com/encode/django-rest-framework/issues/6324.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django Rest模型权限 的相关文章

随机推荐

  • 更新单元格电子表格时,请求的身份验证范围不足 [403]

    在 Google Developer Console 中 Sheet API 已启用 我使用与访问电子表格相同的密钥 当我读取数据时 一切正常 我在 requestUp Execute 上收到请求身份验证范围不足的错误 using Syst
  • 正则表达式lookbehind (JS) 中的可选字符

    我正在尝试使用正则表达式来解析模板中的一些内容 有开始标签和结束标签 但我只想选择这些标签之间的内容 以便我可以 String replace 内容看起来像这样 OpenTag The Content I want CloseTag Ope
  • JHipster Eclipse 项目在“main”中运行内存不足

    我正在构建一个基线 JHipster 项目 不涉及任何附加功能 没有集群等 我使用标准的支持 Node 的 当然 命令行遵循确切的教程步骤 然后将项目作为 Maven 项目导入到 Eclipse 中 根据检查项目 一切看起来都应该工作正常
  • 通过API获取Hbase区域大小

    我正在尝试为 Hbase 编写一个平衡器工具 它可以按区域计数和 或区域大小 storeFile 大小的总和 平衡表的区域服务器之间的区域 我找不到任何返回区域大小或相关信息的 Hbase API 类 我已经检查了一些可用于获取其他表 区域
  • Android JNI - 将 jstring 转换为 wchar_t 的可靠方法

    在我的 Android JNI 代码中 我需要将 jstring 转换为 wchar t 我找到的最接近的参考是如何将 jstring 转换为 wchar t https stackoverflow com questions 68042
  • ASP.NET MVC:返回重定向和ViewData

    我的 MasterPage 中有一个登录框 每当登录信息不正确时 我都会评估ViewData loginError 向用户显示错误消息 登录是 UserController 的一个操作 因此包含登录的表单有action User Login
  • 访问对象数组中的 object.variable

    我需要这段代码的帮助 public class ParkingLot static int MAX 5 static Car Slot new Car MAX public static void main String args Slot
  • Postgresql COPY CSV 错误:最后一个预期列后有额外数据

    我正在尝试从以下位置导入数据http www unitedstateszipcodes org zip code database http www unitedstateszipcodes org zip code database 数据
  • Android NDK 生成不合理的大二进制文件,如何优化 .so 大小?

    我注意到 Android NDK r6b在我的例子中 产生不合理的大结果 so 文件 例如 在我的例子中 我有大约 150 200 行 C 代码 6 个本机方法和 3 个 C 最简单的类 并且此本机代码生成60kb 具有启用的异常和 RTT
  • 调试时“myapp.exe 已触发断点” - 随后 Visual Studio 2015 Update 3 中的符号加载速度缓慢

    我们有一个 STA 模式的 C 项目 它打开一个托管 ESRI ArcEngine 的 C WPF 库MapControl通过 WindowsFormsIntegration 这在 Visual Studio 2013 中工作得很好 自从我
  • 如何使@CreatedBy和@CreatedDate在Spring数据jdbc中不可修改?

    我在 spring data jdbc 中使用简单的 CRUD 操作和审计 因此 当我插入新记录时 审计工作绝对正常 但是当我更新我的记录时 我的创建者和创建日期设置为空 有什么方法可以避免修改这些列吗 注意 spring data jdb
  • Winform 图表控件未创建正确的折线图

    我在使用 Winform 图表控件创建折线图时遇到错误 我用的是VS2013 I m plotting a line chart and it produces the strange visual effect of a single s
  • Facebook OAuth 不返回用户信息中的电子邮件

    我正在进行 spree 3 0 安装 ROR 并尝试使用 facebook oauth 进行身份验证 但成功 oauth 后发回的字段不包含电子邮件 这对我们的应用程序至关重要 这是 facebook 认证成功后的返回结果
  • 如何将 wiris 添加到 django-ckeditor

    我想在我的基于 Django 的项目中使用 CKEditor WIRIS 插件 我成功安装了 django ckeditor 但我不知道应该使用哪个WIRIS插件 在下载页面 http www wiris com en plugins3 c
  • Python/Scipy 插值(地图坐标)

    我正在尝试用 scipy 进行一些插值 我已经浏览了很多例子 但我没有找到我想要的 假设我有一些数据 其中行和列变量可以从 0 变化到 1 每行和列之间的增量变化并不总是相同 见下文 0 00 0 25 0 80 1 00 0 00 1 4
  • 将工作表中的图片获取到 Excel 用户窗体中

    我希望在用户窗体上的图像控件中查看工作表中的图像 该图像将根据组合框中的值而变化 我已将一些图像插入 使用 插入 gt 图片 到工作簿的 Sheet1 中 并将它们命名为 Picture1 和 Picture2 我创建了以下用户表单 表格h
  • 角度和样式表之间的两种绑定的解决方案

    我知道这听起来很愚蠢 但我正在编写一个所见即所得编辑器 允许设计师创建样式指南 我对 Angular 中的双向绑定非常着迷 并且很好奇是否可以在 css 工作表和 css 表单之间进行双向绑定ng model输入字段 目前 我正在制作一个动
  • 在 MySQL 中设置名称 utf8?

    我经常在使用 MySQL 的 PHP 脚本中看到类似下面的内容 query SET NAMES utf8 我从来没有为任何项目这样做过 所以我有几个基本问 题 这是只用 PDO 完成的事情吗 如果不是PDO特有的事情 那么这样做的目的是什么
  • 为什么通过 DerefMut 闭包的可变借用不起作用?

    我正在尝试可变地借用可变变量 Deref and DerefMut实施用于Foo 但编译失败 use std ops Deref DerefMut struct Foo impl Deref for Foo type Target FnMu
  • Django Rest模型权限

    我正在使用 Django 2 1 和 djangorestframework 3 9 2 我希望能够通过 Django 管理界面控制对 Django 模型对象的 REST 操作的访问 最好使用用户权限 例如 只有对模型对象 Foo 具有读取