当前位置: 首页 > article >正文

Django的RBAC认证和权限

1.认证

import jwt
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from rbac import settings


class User(object):
    def __init__(self, id, username, role, exp):
        self.id = id
        self.username = username
        self.role = role
        self.exp = exp



class RbacAuthentication(BaseAuthentication):
    def authenticate(self, request):
        # 1. 获取jwt token
        jwt_token = request.query_params.get("token")
        if not jwt_token:
            return AuthenticationFailed("认证失败")
        # 2.校验jwt token合法性
        try:
            verified_payload = jwt.decode(jwt_token, settings.SECRET_KEY, algorithms="HS256")
            print(verified_payload)
        except Exception as e:
            raise AuthenticationFailed("认证失败")

        # 3. 返回
        user = User(**verified_payload)
        return user, jwt

    def authenticate_header(self, request):
        return "API"

2.权限

from rest_framework.permissions import BasePermission

from rbac import settings


class RbacPermission(BasePermission):
    def has_permission(self, request, view):
        # 1.当前用户角色
        user_role = request.user.role
        # 2.获取当前权限
        user_total_permission = settings.PERMISSION.get(user_role)

        # 3.当前用户请求的路由信息
        router_name = request.resolver_match.view_name
        method = request.method.lower()
        method_list = user_total_permission.get(router_name)
        if not method_list:
            return False
        if method not in method_list:
            return False
        return True

3.全局配置

REST_FRAMEWORK = {
    "UNAUTHENTICATED_USER": None,
    "UNAUTHENTICATED_TOKEN": None,
    "DEFAULT_AUTHENTICATION_CLASSES": ["utils.auth.RbacAuthentication"],
    "DEFAULT_PERMISSION_CLASSES": ["utils.permission.RbacPermission"]
}

http://www.kler.cn/a/397409.html

相关文章:

  • 【PYTORCH】使用MTCNN和InceptionResnetV1简单进行人脸检测和相似度匹配
  • 【Apache Paimon】-- 1 -- Apache Paimon 是什么?
  • SpringMVC数据校验、数据格式化处理、国际化设置
  • cmake生成器表达式
  • 压缩指令的使用
  • 【数据库取证】快速从服务器镜像文件中获取后台隐藏数据
  • Python + Memcached:分布式应用程序中的高效缓存
  • pytest中的断言:深入解析与实践
  • Net.Core Mvc 添加 log 日志
  • 1、PyTorch介绍与张量的创建
  • 迅睿CMS如何实现文章自动推送百度的便捷方法?
  • 怎样遵守编程规范,减少和控制C++编程中出现的bug?
  • uniapp适配暗黑模式配置plus.nativeUI.setUIStyle适配DarkMode配置
  • phonemizer 获取英文文本句子单词音素 - python实现
  • 智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序2 架构for认知系统 :机器学习及其行动门上的机器人
  • Gitcode文件历史记录查看和还原
  • 论文解析:基于区块链的去中心化服务选择,用于QoS感知的云制造(四区)
  • C/C++基础知识复习(19)
  • 【Docker容器】一、一文了解docker
  • shell脚本(2)
  • 【分布式】万字图文解析——深入七大分布式事务解决方案
  • 数据结构C语言描述3(图文结合)--双链表、循环链表、约瑟夫环问题
  • 2024智能机器人与自动控制国际学术会议 (IRAC 2024)
  • docker构建多平台容器
  • 前端无感刷新token
  • Vue的局部使用