django权限管理例子_如何获得自定义房间权限

django权限管理例子_如何获得自定义房间权限前言上一篇我们分析了认证的源码,一个请求认证通过以后,第二步就是查看权限了,drf默认是允许所有用户访问权限源码分析源码入口:APIView.py文件下的initial方法下的check_per

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

上一篇我们分析了认证的源码,一个请求认证通过以后,第二步就是查看权限了,drf默认是允许所有用户访问
 

权限源码分析

源码入口:APIView.py文件下的initial方法下的check_permissions

def check_permissions(self, request):
    """
    检查是否应允许该请求。如果请求不被允许,则引发适当的异常。
    """
    for permission in self.get_permissions():
        if not permission.has_permission(request, self):
            self.permission_denied(
                request,
                message=getattr(permission, 'message', None),
                code=getattr(permission, 'code', None)
            )

权限在get_permissions方法中获取到,源码如下:

def get_permissions(self):
      """
      实例化并返回此视图所需的权限列表。
      """
      return [permission() for permission in self.permission_classes]

permission_classes又等于api_settings.DEFAULT_PERMISSION_CLASSES,所以我们去settings.py文件中查找

'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ],

我们会发现drf默认的权限是AllowAny,我们去看下源码:

class AllowAny(BasePermission):
    """
    允许任意访问。这不是严格要求的,因为您可以使用空的 permission_classes 列表,但它很有用,因为它使意图更加明确。
    """

    def has_permission(self, request, view):
        return True

我们可以看到AllowAny继承自BasePermission,然后定义了has_permission方法,返回值为True

drf为我们提供了4个系统权限认证:

1. AllowAny
认证规则全部返回True:`return True`
    游客与登录用户都有所有权限

2. IsAuthenticated
认证规则必须有登录的合法用户:`return bool(request.user and request.user.is_authenticated)`
    游客没有任何权限,登录用户才有权限

3. IsAdminUser
认证规则必须是:`return bool(request.user and request.user.is_staff)`
    游客没有任何权限,登录用户才有权限

4. IsAuthenticatedOrReadOnly
    认证规则必须是只读请求或者是合法用户无限制
        return bool(
            request.method in SAFE_METHODS or
            request.user and
            request.user.is_authenticated
        )
        游客只读,合法用户无限制

 

自定义认证类

  1. 创建继承BasePermission的权限类
  2. 实现has_permission方法
  3. 实现体根据权限规则 确定 有无权限
  4. 进行全局或局部配置(一般采用局部配置)

权限规则
满足设置的用户条件,代表有权限,返回True
不满足设置的用户条件,代表有权限,返回False

自定义权限

from django.contrib.auth.models import Group
from rest_framework.permissions import BasePermission


class MyPermissions(BasePermission):
    def has_permission(self, request, view):
        rule1 = request.method in ['GET', 'OPTIONS', 'HEAD']
        group = Group.objects.filter(name="管理员").first()
        groups = request.user.groups.all()
        rule2 = group in groups
        rule3 = group and groups
        return rule1 or (rule2 and rule3)

以上定义了3条规则

  • rule1:请求方法是GETOPTIONSHEAD游客和用户都可以访问
  • rule2:当前用户如果有多个分组,其中必须有一个分组是管理员
  • rule3:管理员分组必须存在,用户必须在分组中

接下里我们定义视图

class TestView(APIView):
    permission_classes = [MyPermissions]

    def get(self, request, *args, **kwargs):
        print(request.user)
        return APIResponse(data_msg="所有用户都可以访问")

    def post(self, request, *args, **kwargs):
        print(request.user)
        return APIResponse(data_msg="只有管理员用户可以访问")

视图中只是添加了permission_classes = [MyPermissions]属与局部配置,也就是自定义的权限只针对此视图,其他视图还是默认的全局配置,如果我们还有其他的关于权限的需求,只需要在自定义的权限类中写逻辑即可

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165415.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月30日 下午3:46
下一篇 2022年7月30日 下午3:46


相关推荐

  • rviz的简单使用[通俗易懂]

    rviz的简单使用[通俗易懂]原链接:http://community.bwbot.orgrviz是ros自带的一个图形化工具,可以方便的对ros的程序进行图形化操作。其使用也是比较简单。整体界面如下图所示界面主要分为左侧的显示设置区域,中间的大的显示区域和右侧的视角设置区域。最上面是和导航相关的几个工具。最下面是ros状态相关的一些数据的显示。下面以用rviz查看ORB_SLAM2的topic数据为例展示一下rvi

    2022年4月20日
    144
  • 电商网站的价格大概多少钱一个_电子商务网站报价

    电商网站的价格大概多少钱一个_电子商务网站报价做一个电商网站需要多少钱?一、服务器购买、微信公众号认证、短信接口、物流接口、第三方支付接口费率等等。拿服务器来说,有一般IDC公司的虚拟主机,云虚拟主机、独立ECS,价格会有天壤之别,那具体根据您后期访问用户量和稳定性本身来选择,,几百到几千不等。二、功能开发费用电商平台的主要费用就是根据用户需要哪些功能进行定制开发来评估费用的,这其实又大致分为两大类。第一,必备功能。电商平台里面的必备功能有:会员注册登录、商品分类展示、在线支付购物车、订单管理等。第二、体验功能。体验功能主要是便于电商平台

    2022年10月1日
    4
  • python编程前景_Python前景如何,学完后可以从事方向?

    python编程前景_Python前景如何,学完后可以从事方向?前段时间浙江八年级新增了Python编程的课程,消息一出,引起了很多人的关注。连中学生都在学Python了,你还在犹豫要不要学习吗?对于想学Python,却又担心Python前景以及学完后可以从事方向的人,下面,小雷就给大家介绍一下。Python前景怎么样?目前国内外很多公司都在使用Python,例如搜索引擎Google的核心代码是Python完成的、迪士尼公司动画生成的Unix版本都内建了Pyt…

    2022年5月16日
    42
  • 基于Pytest框架的自动化测试开发实践(万字长文入门篇)

    基于Pytest框架的自动化测试开发实践(万字长文入门篇)Pytest 是 Python 的一种易用 高效和灵活的单元测试框架 可以支持单元测试和功能测试 本文不以介绍 Pytest 工具本身为目的 而是以一个实际的 API 测试项目为例 将 Pytest 的功能应用到实际的测试工程实践中 教大家将 Pytest 用起来 在开始本文之前 我想跟大家澄清两个概念 一个是测试框架一个是测试工具 很多人容易把他们搞混了 测试框架是诸如 Unittest Pytest TestN

    2026年3月18日
    2
  • Python – pycharm 代码自动补全

    Python – pycharm 代码自动补全安装 pycharm 后 输入代码后 没有补全提示首先检查是否关闭了代码提示 如下图 将红框中 PowerSaveMod 前的勾去掉第二步 如果在输入某些代码时还是没有补全提醒 可能是配置好 python 环境则点击 file gt settings gt projectInter 如下图选择安装的 python 输入代码就会有提示了

    2026年3月19日
    3
  • 查看idea激活码(最新序列号破解)

    查看idea激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    107

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号