zoukankan      html  css  js  c++  java
  • django RBAC类

    #  -*- coding: utf-8 -*-
    '''
    @author: Swain
    @contact: 624420781@qq.com
    @file: middlewares.py
    @time: 2019/04/01 下午 15:10
    '''
    from django.db.models import F
    from django.conf import settings
    import re
    from common.public_method import return_result
    from django.shortcuts import redirect
    from django.contrib.auth import authenticate
    from api.models import User,Menu,Permission
    
    class RbacMiddleware(object):
        """
        检查用户的url请求是否是其权限范围内
        """
        def process_view(self, request, view, args, kwargs):
            request_url = request.path_info
            #  如果不是api接口,放行
            if not re.match('^/api/', request_url):
                return None
    
            username = request.user
            user = User.objects.filter(username=username).first()
            if not user:
                return return_result(status=False, code=500, message="该用户没有权限访问!")
            request.userobj = user
    
            if user.surperman:
                return None
                # permission_list = Permission.objects.annotate(permissions__url=F('url')).values('permissions__url')
            else:
                permission_list = user.roles.values('permissions__url').distinct()
    
            # 权限数据处理
            permissions = [each['permissions__url'] for each in permission_list]
            
            if not permissions:
                return return_result(status=False, code=500, message="没有获取到用户权限信息!")
    
            #  如果请求url在白名单,放行
            for url in settings.SAFE_URL:
                if url == request_url:
                    return None
    
            if request_url in permissions:
                return None
            else:
                return return_result(status=False, code=500, message="没有权限访问")

    作者:陈耿聪 —— 夕狱

    出处:https://www.cnblogs.com/CGCong/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    petshop数据库(一部分,待续)
    asp:Wizard导航的应用CheckOut.aspx
    web层的控件之二AddressForm
    表现层笔记之页面是如何调用
    petshop缓存依赖的工厂模式
    研究sohu前台浏览器兼容标准
    petshop缓存依赖及困惑
    web层的控件之三CartList
    初涉CSS Hack
    模糊关联规则挖掘
  • 原文地址:https://www.cnblogs.com/CGCong/p/11671985.html
Copyright © 2011-2022 走看看