zoukankan      html  css  js  c++  java
  • Django:CBV模式的数据权限实现

    需求:

      根据不同的账号登录进来显示不同的数据,如:服务器列表,A项目的人员登录只能看到自己项目的服务器数据,超级管理员能看到所有项目的数据。

    @method_decorator(login_wrapper, name='dispatch')
    class UATSITServerInfoList(generics.ListAPIView):
        """
        获取UAT/SIT的服务器信息
        """
        serializer_class = ServerInfoSerializers
        # 渲染数据方式
        renderer_classes = (renderers.TemplateHTMLRenderer, renderers.JSONRenderer)
        # renderer_classes = [renderers.JSONRenderer]
        template_name = 'UAT_SIT_server_list.html'
    
        # 模糊匹配查询
        filterset_class = server_info_filter.ServerInfoFilter
    
        def get_queryset(self):
            """
            先重写get_queryset方法过滤出所需数据,不可以在list中直接给queryset赋值,否则filterset_class过滤器会失效
            :return:
            """
            # 根据用户id查出该用户是哪个项目的负责人,再查询对应项目的服务器信息
            project_id = Projects.objects.filter(project_manager_id=self.request.session['user_id']).values("id")
            project_id_list = []
            for i in list(project_id):
                project_id_list.append(i["id"])
            queryset = ServerInfo.objects.exclude(env_type="生产").filter(project_name_id__in=project_id_list).order_by(
                '-update_time')
            return queryset

    既然是要过滤数据,那肯定的重写get_queryset()方法,根据登录时写入的session获取到用户id,再查出该用户属于哪个项目,然后根据项目查询出对应的服务器信息

  • 相关阅读:
    安装docker (centos7.6)
    idea docker docker-compose发布springboot站点到tomcat
    tomcat启动慢的解决办法
    skywalking6.3.0安装(centos7.6)
    RocketMQ集群安装 2主2从 console
    RocketMQ官方启动脚本不支持jdk11的修改
    python在windows上创建虚拟环境
    JVM之Java运行时数据区(线程共享区)
    Dijkstra算法和Floyd算法
    JVM之Java运行时数据区(线程隔离区)
  • 原文地址:https://www.cnblogs.com/gcgc/p/14719304.html
Copyright © 2011-2022 走看看