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,再查出该用户属于哪个项目,然后根据项目查询出对应的服务器信息

 

posted @ 2021-04-29 18:55  秋寻草  阅读(184)  评论(0编辑  收藏  举报