zoukankan      html  css  js  c++  java
  • 前后端分离进行权限管理之后端API返回菜单及权限信息(三)

    一、动态菜单API的生成

    1、API

        #菜单信息
        url(r'^menus$', views.MenuModelView.as_view({"get": "list", }), name="menus-list"),

    2、MenuModelView

    from collections import OrderedDictclass MenuModelView(GenericViewSet):
    
        authentication_classes = [AuthToken]
    
        def list(self,request,*args,**kwargs):
    
            ret = {"data": {}, "meta": {"message": "获取菜单成功", "code": 2000}}
            try:
                user = request.user
                menus_dict = InitPermission(request, user).init_menus_dict()
                od = OrderedDict()
                if menus_dict:
                    for key in sorted(menus_dict):
                        od[key] = menus_dict[key]
                ret["data"] = {"menus_list":od.values()}
            except Exception as e:
                ret["meta"]["message"] = "获取菜单失败"
                ret["meta"]["code"] = 2001
    
            return Response(ret)

      在restframework框架的认证组件中通过 authentication_classes = [AuthToken]进行认证,获得user,从而传入user,从而初始化菜单数据,然后根据数据库中的positionid可以进行菜单排序。

    认证参考:https://www.cnblogs.com/shenjianping/p/11387324.html

    初始化菜单参考:https://www.cnblogs.com/shenjianping/p/11448427.html

    二、权限API生成

    1、API

        #前端获取权限,用于按钮级别的权限检验
        url(r'^roles/rights$',views.RightsView.as_view({"get": "list"}), name="roles-rights-list"),

    2、RightsView

    class RightsView(GenericViewSet):
    
        def list(self,request,*args,**kwargs):
            """
            从redis中获取权限相关,用于前台按钮级别权限检验
            {'/crm/dept$': ['get'], 'rights/(?P<type>\w+)$': ['get'], '/crm/menus': ['get']
            :param request:
            :param args:
            :param kwargs:
            :return:
            """
            #从redis中获取permission_dict
            ret = {"data": {}, "meta": {
                "message": "获取权限信息成功", "code": 2000}}
            try:
                permission_bytes = SessionStore().get_session(settings.PERMISSION_SESSION_KEY)
                permission_dict = eval(permission_bytes)
                ret["data"] = permission_dict
            except Exception as e:
                ret["meta"]["message"] = "获取权限信息失败"
                ret["meta"]["code"] = 2001
    
            return Response(ret)

    在用户权限初始化后会将其保存在redis中,这里返回的就是在redis中存储的用户权限。

  • 相关阅读:
    silverlight 网站 iis发布
    使用PerfView诊断.Net GC的问题
    七种方法实现单例模式
    java多线程的学习之路(二)
    java多线程的学习之路(一)
    几种特殊的二叉树
    解析json字符串,把json字符串转换成Java对象
    KMP算法的理解
    常用 Git 命令清单
    Jquery.cookie.js 源码和使用方法
  • 原文地址:https://www.cnblogs.com/shenjianping/p/11457076.html
Copyright © 2011-2022 走看看