前后端分離進行權限管理之后端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中存儲的用戶權限。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM