如何在 Django Rest Framework 中过滤具有权限的用户相关记录

2024-01-29

我需要知道如何限制对经过身份验证的用户的访问,以便可以为以管理员身份登录的用户完整列出用户记录,而对于以用户身份登录的用户,只能列出、更新和创建他们的记录。

目前我正在使用serializers.ModelSerializer、viewsets.ModelViewSet 和permissions.BasePermission 但似乎进展不快。


没有现成的方法可以用魔杖处理此类权限。尽管有一些库可以处理对象级别权限,但请检查django-guardian因为它与 Django Rest 框架有很好的接口。

处理这个问题的一个好方法是将 django-guardian 的功能与自定义的功能相结合get_queryset()@ilse2005's 答案中描述的方法。这会照顾你的list and retrieve并且更新和删除可以委托给django-guardian.

class View(ModelViewSet):
    ...

    def get_queryset(self):
        if self.request.user.is_superuser:
            return FooModel.objects.all()
        return FooModel.objects.filter(owner=self.request.user)

这也可以与 DRF 中的 APIView 和其他基于类的视图一起使用。

Caution:如果您的 API 使用者依赖 HTTP 错误代码来表示此方法,则会抛出 404 not found 而不是 HTTP403(这是表示权限被拒绝的标准方式)。在这种情况下,建议编写自定义权限类。例如,以下 ip 黑名单权限类直接来自文档 -http://www.django-rest-framework.org/api-guide/permissions/ http://www.django-rest-framework.org/api-guide/permissions/

from rest_framework import permissions

class BlacklistPermission(permissions.BasePermission):
    """
    Global permission check for blacklisted IPs.
    """

    def has_permission(self, request, view):
        ip_addr = request.META['REMOTE_ADDR']
        blacklisted = Blacklist.objects.filter(ip_addr=ip_addr).exists()
        return not blacklisted

通过设置类变量在视图集中使用此类

permission_classes = BlackListPermission

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

如何在 Django Rest Framework 中过滤具有权限的用户相关记录 的相关文章

随机推荐

  • 检查文本框是否包含无效字符

    我在尝试使用 JavaScript 检查文本框是否仅包含 a z 0 9 值时遇到问题 我的页面上有一个文本框
  • 是否可以将项目从 Enum 加载到 .NET 3.5 中的 ComboBox?

    是否可以将项目从 Enum 加载到 NET 3 5 中的 ComboBox Yes combobox DataSource Enum GetValues typeof SomeEnum
  • 如何从 jQuery 函数获取有用的堆栈跟踪?

    假设我有一个名为 myfile js 的文件 在 myfile js 内部我有以下代码 document on my custom event function e my custom function e alert undefined
  • 多个用户控件共享集合依赖属性

    我已经实现了自己的基于列表框的用户控件 它具有集合类型的依赖属性 当我在窗口中只有一个用户控件实例时 它工作得很好 但如果我有多个实例 我会遇到它们共享集合依赖属性的问题 下面是一个示例来说明这一点 我的用户控件称为 SimpleList
  • 从 std::string 对象到 char* 的显式转换,而不使用任何 std::string 成员函数

    这道题并不是什么问题 更多的是一个深入理解内存布局的问题std string 我做了一些实验并意识到可以显式转换std string to char 并成功检索存储在 a 中的 字符串 std string目的 问题是 当一个起始地址std
  • 当用户拖动鼠标时监听 JFrame 调整大小事件?

    当用户单击 JFrame 的一角来调整大小并拖动鼠标时 JFrame 将根据用户拖动时鼠标的当前位置重新绘制 您如何收听这些事件 以下是我目前尝试过的 public final class TestFrame extends JFrame
  • 使用 jQuery 提取 XML 中的 CDATA 以用作 HTML 内容

    我正在检索 Google Earth kml xml 文件并使用该内容在 Google 地图中放置标记 我感兴趣的特定 XML 标签如下所示
  • 量角器测试未在 Firefox 上启动

    我有一组在 chrome 上运行良好的测试 但是当我将功能 browserName 从 chrome 更改为 firefox 时 甚至没有收到错误信息 Before capabilities browserName chrome chrom
  • 位置服务 onProviderEnabled 从未被调用

    我有一项可以在我的应用程序中更新位置的服务 当我在禁用 GPS 的情况下启动应用程序 返回 Android 菜单并启用 GPS 最后返回我的应用程序 服务尚未被销毁 时 永远不会调用 onProviderEnabled 有人可以帮忙吗 UP
  • 空列表布尔值

    这可能很愚蠢 但对我来说有点令人困惑 In 697 l In 698 bool l Out 698 False In 699 l True Out 699 False In 700 l False Out 700 False In 701
  • 为什么 CORS 默认禁用?

    好吧 首先 我绝对知道我们对此有很多答案 并且有大量关于该主题的文章 在输入以下内容之前 我刚刚阅读了这些答案 为什么没有凭据的 CORS 被禁止 https stackoverflow com questions 26306080 why
  • Zurb Foundation 5 - 行填充/边距

    我正在尝试为我的行创建背景颜色 但是当我设置背景颜色时 它会扩展到列的常规宽度 然后我尝试使用填充来缩小行 这有效 但使列更小 我需要以某种方式删除粉红色区域 仅保留红色背景 并保持列均匀 有任何想法吗 div class row styl
  • Apache Bench 和 POST 数据

    我正在尝试使用 apache bench 在我的 Rails 应用程序中加载测试创建操作 但 ab 似乎没有发送 POST 数据 尽管它确实正确提交了 POST 而不是 GET 请求 这是我运行的命令 ab n 1 p post v 4 h
  • 如何通过 Meteor.call() 访问服务器端变量?

    我认为在 Meteor 中定义服务器端类来存储有关系统的信息是明智的做法 该信息应由选定的用户访问 它不存储在 MongoDB 中 所以据我了解 订阅和发布不是一个选项 这是我的简化方法 if Meteor isServer serverV
  • 如何检查Paramiko是否成功将文件上传到SFTP服务器?

    我使用 Paramiko 将文件放入 SFTP 服务器 import paramiko transport paramiko Transport host port transport connect username username p
  • 禁用 HTML 中的 GIF 动画

    在 HTML 中 有没有办法在 标签中包含动画 GIF 但自动告诉 GIF 不要动画 我意识到用户可以通过按 ESC 或单击 停止 来停止动画 但我希望 GIF 根本不动画 我只想在一个特定页面上执行此操作 并且制作 1500 GIF 的单
  • Xcode 4.3.3 iPhone 5.1 模拟器经常挂起

    我最近一直在四处寻找是否有人遇到类似的问题 但找不到太多信息 大多数时候在模拟器中启动应用程序效果很好 但是模拟器每天都会挂起一两次 我必须强制退出它 XCode 说 在模拟器上运行 xyz 当您尝试在 XCode 中 停止 时 什么也不会
  • ng-bootstrap crash:如何应用动画?

    我正在使用折叠 https ng bootstrap github io components collapse https ng bootstrap github io components collapse 然而 它并没有动画 即使不在
  • Laravel sql server 更改架构的表名称

    我正在开发一个项目 我试图在 SQL Server 数据库上设置一些具有架构的表 因此我手动将表名称更改为迁移文件上的 schema name table name 并且它起作用了 所以这里是例子 Schema create elector
  • 如何在 Django Rest Framework 中过滤具有权限的用户相关记录

    我需要知道如何限制对经过身份验证的用户的访问 以便可以为以管理员身份登录的用户完整列出用户记录 而对于以用户身份登录的用户 只能列出 更新和创建他们的记录 目前我正在使用serializers ModelSerializer viewset