rbac组件之菜单操作(代码片段)

shenjianping shenjianping     2022-12-15     310

关键词:

菜单包括菜单列表,菜单列表不仅将菜单列出来,而且将每个菜单下的权限也列出来、菜单的添加、删除、修改。

urls.py

...

    re_path(r^menus/list/$, MenuView.as_view(), name=menus_list),
    re_path(r^menus/add/$, MenuAddView.as_view(), name=menus_add),
    re_path(r^menus/edit/(?P<mid>\\d+)/$, MenuEditView.as_view(), name=menus_edit),
    re_path(r^menus/dell/(?P<mid>\\d+)/$, MenuDelView.as_view(), name=menus_del),

...

1、后台处理菜单列表页

class MenuView(View):
    def get(self,request):
        menu_queryset=Menu.objects.all()

        pid=request.GET.get(pid)

        if pid:
            root_permission_queryset = Permission.objects.filter(menu_id=pid).values(id, title, url, name, parent_id,menu__title)
        else:
            root_permission_queryset = Permission.objects.filter(menu_id__isnull=False).values(id, title, url, name, parent_id,menu__title)
        # print(‘permission_queryset‘,root_permission_queryset)

        all_root_permission_queryset=Permission.objects.all().values(id, title, url, name, parent_id)
        root_permission_dict=
        for row in root_permission_queryset:
            if not row[parent_id]:
                root_permission_dict[row[id]]=
                    id:row[id],
                    title:row[title],
                    name:row[name],
                    url:row[url],
                    menu_title:row[menu__title],
                    children:[]
                
        for row in all_root_permission_queryset:
            parent_id=row[parent_id]
            if parent_id in root_permission_dict:
                root_permission_dict[parent_id][children].append(
                    
                        id:row[id],
                        title:row[title],
                        name:row[name],
                        url:row[url]
                    
                )
        print(root_permission_dict)

        return render(request,rbac/menu_list.html,menu_queryset:menu_queryset,
                                                     root_permission_dict:root_permission_dict,
                                                     pid:pid

                                                     )

将每一个菜单及其权限取出来,组成相应的数据结构

技术图片

    64: 
        id: 64,
        name: rbac:multi_permissions,
        menu_title: 权限管理,
        title: 批量添加权限,
        children: [],
        url: /rbac/multi/permissions/
    ,
    1: 
        id: 1,
        name: stark:crm_userinfo_changelist,
        menu_title: 权限管理,
        title: 用户列表,
        children: [
            id: 2,
            name: stark:crm_userinfo_add,
            title: 添加用户,
            url: /stark/crm/userinfo/add/
        , 
            id: 3,
            name: stark:crm_userinfo_change,
            title: 修改用户,
            url: /stark/crm/userinfo/(?P<pk>\\\\d+)/change/
        , 
            id: 4,
            name: stark:crm_userinfo_del,
            title: 删除用户,
            url: /stark/crm/userinfo/(?P<pk>\\\\d+)/del/
        , 
            id: 78,
            name: stark:crm_userinfo_reset_pwd,
            title: 重置密码,
            url: /stark/crm/userinfo/reset/password/(?P<pk>\\\\d+)/
        ],
        url: /stark/crm/userinfo/list/
    ,
    66: 
        id: 66,
        name: login,
        menu_title: 其它,
        title: 登陆,
        children: [],
        url: /login/
    ,
    99: 
        id: 99,
        name: stark:crm_order_customer_order,
        menu_title: 客户管理,
        title: 个人订单列表,
        children: [
            id: 100,
            name: stark:crm_paymentrecord_changelist,
            title: 个人账单列表,
            url: /stark/crm/paymentrecord/list/(?P<order_id>\\\\d+)/
        , 
            id: 102,
            name: stark:crm_paymentrecord_change,
            title: 修改个人账单,
            url: /stark/crm/paymentrecord/(?P<order_id>\\\\d+)/(?P<pk>\\\\d+)/change/
        , 
            id: 103,
            name: stark:crm_paymentrecord_del,
            title: 删除个人账单,
            url: /stark/crm/paymentrecord/(?P<order_id>\\\\d+)/(?P<pk>\\\\d+)/del/
        , 
            id: 105,
            name: stark:crm_paymentrecord_add,
            title: 添加个人账单,
            url: /stark/crm/paymentrecord/add/(?P<order_id>\\\\d+)/
        ],
        url: /stark/crm/order/customer/order/list/
    ,
    37: 
        id: 37,
        name: stark:crm_productparameter_changelist,
        menu_title: 产品管理,
        title: 产品参数列表,
        children: [
            id: 38,
            name: stark:crm_productparameter_add,
            title: 添加产品参数,
            url: /stark/crm/productparameter/add/
        , 
            id: 39,
            name: stark:crm_productparameter_change,
            title: 修改产品参数,
            url: /stark/crm/productparameter/(?P<pk>\\\\d+)/change/
        , 
            id: 40,
            name: stark:crm_productparameter_del,
            title: 删除产品参数,
            url: /stark/crm/productparameter/(?P<pk>\\\\d+)/del/
        ],
        url: /stark/crm/productparameter/list/
    ,
    65: 
        id: 65,
        name: rbac:distribute_permissions,
        menu_title: 权限管理,
        title: 分配权限,
        children: [],
        url: /rbac/distribute/permissions/
    ,
    49: 
        id: 49,
        name: stark:crm_productaudit_changelist,
        menu_title: 产品管理,
        title: 产品审核列表,
        children: [],
        url: /stark/crm/productaudit/list/
    ,
    72: 
        id: 72,
        name: index,
        menu_title: 其它,
        title: 主页,
        children: [],
        url: /index/
    ,
    9: 
        id: 9,
        name: stark:crm_customer_per_changelist,
        menu_title: 客户管理,
        title: 个人客户列表,
        children: [
            id: 10,
            name: stark:crm_customer_per_add,
            title: 个人客户添加,
            url: /stark/crm/customer/per/add/
        , 
            id: 11,
            name: stark:crm_customer_per_change,
            title: 个人客户修改,
            url: /stark/crm/customer/per/(?P<pk>\\\\d+)/change/
        , 
            id: 12,
            name: stark:crm_customer_per_del,
            title: 个人客户删除,
            url: /stark/crm/customer/per/(?P<pk>\\\\d+)/del/
        , 
            id: 84,
            name: stark:crm_order_add,
            title: 添加客户订单,
            url: /stark/crm/order/add/(?P<customer_id>\\\\d+)/
        , 
            id: 85,
            name: stark:crm_order_change,
            title: 修改客户订单,
            url: /stark/crm/order/(?P<customer_id>\\\\d+)/(?P<pk>\\\\d+)/change/
        , 
            id: 86,
            name: stark:crm_order_del,
            title: 删除客户订单,
            url: /stark/crm/order/(?P<customer_id>\\\\d+)/(?P<pk>\\\\d+)/del/
        , 
            id: 88,
            name: stark:crm_consultantrecord_per_add,
            title: 添加客户咨询记录,
            url: /stark/crm/consultantrecord/per/add/(?P<customer_id>\\\\d+)/
        , 
            id: 89,
            name: stark:crm_consultantrecord_per_change,
            title: 修改客户咨询记录,
            url: /stark/crm/consultantrecord/per/(?P<customer_id>\\\\d+)/(?P<pk>\\\\d+)/change/
        , 
            id: 90,
            name: stark:crm_consultantrecord_per_del,
            title: 删除客户咨询记录,
            url: /stark/crm/consultantrecord/per/(?P<customer_id>\\\\d+)/(?P<pk>\\\\d+)/del/
        , 
            id: 91,
            name: stark:crm_consultantrecord_per_changelist,
            title: 客户咨询列表,
            url: /stark/crm/consultantrecord/per/constant/list/(?P<customer_id>\\\\d+)/
        , 
            id: 92,
            name: stark:crm_order_changelist,
            title: 客户订单列表,
            url: /stark/crm/order/customer/order/(?P<customer_id>\\\\d+)/
        ],
        url: /stark/crm/customer/per/list/
    ,
    45: 
        id: 45,
        name: stark:crm_workshop_changelist,
        menu_title: 生产流程管理,
        title: 生产车间列表,
        children: [
            id: 46,
            name: stark:crm_workshop_add,
            title: 添加生产车间,
            url: /stark/crm/workshop/add/
        , 
            id: 47,
            name: stark:crm_workshop_change,
            title: 修改生产车间,
            url: /stark/crm/workshop/(?P<pk>\\\\d+)/change/
        , 
            id: 48,
            name: stark:crm_workshop_del,
            title: 删除生产车间,
            url: /stark/crm/workshop/(?P<pk>\\\\d+)/del/
        ],
        url: /stark/crm/workshop/list/
    ,
    79: 
        id: 79,
        name: stark:crm_paymentrecord_audit_list,
        menu_title: 费用管理,
        title: 账单审核,
        children: [],
        url: /stark/crm/paymentrecord/audit/
    ,
    80: 
        id: 80,
        name: logout,
        menu_title: 其它,
        title: 登出,
        children: [],
        url: /logout/
    ,
    17: 
        id: 17,
        name: stark:crm_product_changelist,
        menu_title: 产品管理,
        title: 产品列表,
        children: [
            id: 18,
            name: stark:crm_product_add,
            title: 产品增加,
            url: /stark/crm/product/add/
        , 
            id: 19,
            name: stark:crm_product_change,
            title: 产品修改,
            url: /stark/crm/product/(?P<pk>\\\\d+)/change/
        , 
            id: 20,
            name: stark:crm_product_del,
            title: 产品删除,
            url: /stark/crm/product/(?P<pk>\\\\d+)/del/
        ],
        url: /stark/crm/product/list/
    ,
    82: 
        id: 82,
        name: stark:crm_order_check_order,
        menu_title: 订单管理,
        title: 订单审核,
        children: [],
        url: /stark/crm/order/check_list/
    ,
    53: 
        id: 53,
        name: rbac:roles_list,
        menu_title: 权限管理,
        title: 角色列表,
        children: [
            id: 54,
            name: rbac:roles_add,
            title: 添加角色,
            url: /rbac/roles/add/
        , 
            id: 55,
            name: rbac:roles_edit,
            title: 修改角色,
            url: /rbac/roles/edit/(?P<rid>\\\\d+)/
        , 
            id: 56,
            name: rbac:roles_del,
            title: 删除角色,
            url: /rbac/roles/dell/(?P<rid>\\\\d+)/
        , 
            id: 60,
            name: rbac:menus_del,
            title: 删除菜单,
            url: /rbac/menus/dell/(?P<mid>\\\\d+)/
        ],
        url: /rbac/roles/list/
    ,
    41: 
        id: 41,
        name: stark:crm_procedure_changelist,
        menu_title: 生产流程管理,
        title: 生产流程列表,
        children: [
            id: 42,
            name: stark:crm_procedure_add,
            title: 添加生产流程,
            url: /stark/crm/procedure/add/
        , 
            id: 43,
            name: stark:crm_procedure_change,
            title: 修改生产流程,
            url: /stark/crm/procedure/(?P<pk>\\\\d+)/change/
        , 
            id: 44,
            name: stark:crm_procedure_del,
            title: 删除生产流程,
            url: /stark/crm/procedure/(?P<pk>\\\\d+)/del/
        ],
        url: /stark/crm/procedure/list/
    ,
    57: 
        id: 57,
        name: rbac:menus_list,
        menu_title: 权限管理,
        title: 菜单列表,
        children: [
            id: 58,
            name: rbac:menus_add,
            title: 添加菜单,
            url: /rbac/menus/add/
        , 
            id: 59,
            name: rbac:menus_edit,
            title: 修改菜单,
            url: /rbac/menus/edit/(?P<mid>\\\\d+)/
        , 
            id: 61,
            name: rbac:permissions_add,
            title: 添加权限,
            url: /rbac/permissions/add/
        , 
            id: 62,
            name: rbac:permissions_edit,
            title: 修改权限,
            url: /rbac/permissions/edit/(?P<pid>\\\\d+)/
        , 
            id: 63,
            name: rbac:permissions_del,
            title: 删除权限,
            url: /rbac/permissions/dell/(?P<pid>\\\\d+)/
        ],
        url: /rbac/menus/list/
    ,
    5: 
        id: 5,
        name: stark:crm_department_changelist,
        menu_title: 权限管理,
        title: 部门列表,
        children: [
            id: 6,
            name: stark:crm_department_add,
            title: 添加部门,
            url: /stark/crm/department/add/
        , 
            id: 7,
            name: stark:crm_department_change,
            title: 修改部门,
            url: /stark/crm/department/(?P<pk>\\\\d+)/change/
        , 
            id: 8,
            name: stark:crm_department_del,
            title: 删除部门,
            url: /stark/crm/department/(?P<pk>\\\\d+)/del/
        ],
        url: /stark/crm/department/list/
    
数据格式

技术图片

2、处理添加菜单

添加以及修改使用的都是modelform

技术图片
from django import forms
from rbac import models
from django.utils.safestring import mark_safe

ICON_LIST = [
    [fa fa-address-book, <i aria-hidden="true" class="fa fa-address-book"></i>],
    [fa fa-address-book-o, <i aria-hidden="true" class="fa fa-address-book-o"></i>],
    [fa fa-address-card, <i aria-hidden="true" class="fa fa-address-card"></i>],
    [fa fa-address-card-o, <i aria-hidden="true" class="fa fa-address-card-o"></i>],
    [fa fa-adjust, <i aria-hidden="true" class="fa fa-adjust"></i>],
    [fa fa-american-sign-language-interpreting,<i aria-hidden="true" class="fa fa-american-sign-language-interpreting"></i>],
    [fa fa-stack-overflow, <i class="fa fa-stack-overflow" aria-hidden="true"></i>],
    [fa fa-clipboard, <i class="fa fa-clipboard"></i>],

]

for item in ICON_LIST:
    item[1]=mark_safe(item[1])

class MenuModelForm(forms.ModelForm):

    class Meta:
        model=models.Menu

        fields=[title,icon]
        widgets = 
            title: forms.TextInput(attrs=placeholder: 请输入菜单名称, class: form-control),
            icon:forms.RadioSelect(choices=ICON_LIST)
        
modelform
class MenuAddView(View):
    def get(self,request):
        form = MenuModelForm()
        return render(request,rbac/menu_add.html,form:form)

    def post(self,request):
        form=MenuModelForm(data=request.POST)
        if form.is_valid():
            form.save()
            return redirect(reverse(rbac:menus_list))
        return render(request,rbac/menu_add.html,form:form)

3、处理修改菜单

class MenuEditView(View):

    def get(self,request,mid):
        menu_obj=Menu.objects.filter(id=mid).first()
        if not menu_obj:
            return HttpResponse(该菜单不存在)
        form=MenuModelForm(instance=menu_obj)
        return render(request,rbac/menu_edit.html,form:form)

    def post(self,request,mid):
        menu_obj=Menu.objects.filter(id=mid).first()
        form=MenuModelForm(data=request.POST,instance=menu_obj)
        if form.is_valid():
            form.save()
            return redirect(reverse(rbac:menus_list))
        return render(request, rbac/menu_edit.html, form: form)

4、处理删除菜单

class MenuDelView(View):

    def  get(self,request,mid):
        Menu.objects.filter(id=mid).first().delete()
        return redirect(reverse(rbac:menus_list))

 

rbac组件之数据库设计(代码片段)

rbac是基于角色的权限设计,一共包含六张表,具体的表设计如下:fromdjango.dbimportmodelsclassMenu(models.Model):"""菜单表"""title=models.CharField(verbose_name=‘菜单名称‘,max_length=32,unique=True)icon=models.CharField(max_length=128,blan 查看详情

权限组件之rbac(代码片段)

rbac:基于角色的权限访问控制(Role-BasedAccessControl)。 deflogin(request):ifrequest.method=="GET":returnrender(request,"login.html")else:user=request.POST.get("user")pwd=request.POST.get("pwd")user=UserInfo.o 查看详情

rbac组件权限按钮,菜单,可拔插(代码片段)

 1、通用模板overflow:auto;//在a和b模板中进行切换a模板:左侧菜单跟随滚动条 b模板 左侧以及上不动****<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><stylet 查看详情

rbac基于角色的权限控制组件目录

   权限组件之表设计 权限组件之录入数据 权限组件之获取登入用户的所有权限 权限组件之将登录用户权限写入到session中 session源码 权限组件之粒度到按钮级别1 权限组件之粒度到按钮级别2 ... 查看详情

crmrbac组件的应用(代码片段)

1拷贝rbac组件到项目中,注册这个app2数据库迁移  1删除rbac下migrations里除了init外的文件  2修改用户表classUser(models.Model):"""用户表"""#name=models.CharField(max_length=32,verbose_name=‘用户名‘)#pwd=models.CharField(max_length=32,verbose_name=‘密... 查看详情

2rbac组件后台布局模板,权限粒度控制,权限按钮(代码片段)

1、后台布局管理https://www.cnblogs.com/venicid/p/7772742.html#_label01、通用模板overflow:auto;//在a和b模板中进行切换a模板:左侧菜单跟随滚动条 b模板 左侧以及上不动****<!DOCTYPEhtml><htmllang="en"><head><metachars 查看详情

将权限组件应用到新项目(代码片段)

1. 拷贝rbac组件到新的项目中,注册app 2.修改用户表,继承rbac中的UserclassUser(models.Model):"""用户表"""#name=models.CharField(max_length=32,verbose_name=‘名称‘)#password=models.CharField(max_length=32,verbose_name=‘密码‘)roles=models.ManyToManyField(Role,ver... 查看详情

django之管理权限(代码片段)

...张表在rbac这个APP中:(将管理权限设为一个独立的app(组件)) models.pyfromdjango.dbimportmodels#Createyourmodelshere.classUser(models.Model):name=models.CharField(max_length=32)pwd=models.CharField(max_ 查看详情

django之权限组件(代码片段)

一、需求分析RBAC(Role-BasedAccessControl,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,... 查看详情

django-crm-项目部署(代码片段)

流程rbac组件的应用1:拷贝rbac组件到新的项目中,执行注册2:数据库迁移先删除rbac下migrations下除了init之外的所有文件修改用户表classUser(models.Model):‘‘‘用户表‘‘‘roles=models.ManyToManyField(Role,blank=True)#关联用类名classMeta:abstract=Tru... 查看详情

django框架之rbac+contenttype(代码片段)

...进行编号存储到content_type表中#应用一:权限表的权限是操作表的,所有在权限表中有一个content_type表的外键,标识该权限具体操作的是哪张表#应用二:价格策略"""Course:name、type、days、price、vip_type基础免费课70中级... 查看详情

基于django实现rbac权限管理(代码片段)

...为url,一个权限对应一个url。在实际应用中,url是依附在菜单下的,比如一个简单的生产企业管理系统,菜单可以大致分为以下几块:制造、资材、生产管理、人事、财务等等。每个菜单下又可以有子菜单,但最终都会指向一个... 查看详情

使用layui框架实战之栅格系统和菜单评分组件运用心得(代码片段)

@[toc]layui的优缺点详解优点:Layui作为国内开源的前端UI,简单易用,界面简单美观。目标对象是对前端不太了解的后端开发人员,它也适用于后端开发人员。(1)Layui是一个轻量级框架,简单而美观。适用于后端模式的开发,对... 查看详情

4crm-权限管理rbac(代码片段)

1、引入权限组件rbac1、settings配置app、中间件INSTALLED_APPS=[......‘crm.apps.CrmConfig‘,"stark.apps.StarkConfig",‘rbac.apps.RbacConfig‘,]中间件MIDDLEWARE=[。。。。‘rbac.service.rbac.ValidPermission‘,]2、员工表UserInfo和rbac.Us 查看详情

openharmony-arkui(ts)开发之下拉选择菜单(代码片段)

...通过采用ETS实现我们项目开发中比较常见的下拉选择菜单组件来初步了解和体验下ETS的开发规范和方法,主要用到的TS知识点有Flex布局、文本展示、样式绑定、图片引入、父子组件变量共享、参数传递、ForEach循环遍历、事件绑... 查看详情

权限组件:一级菜单的展示增删改查和保留原参数(代码片段)

效果图: 一、路由配置rbac/urls.pyfromdjango.urlsimportre_pathfromrbac.viewsimportmenuurlpatterns=[...#菜单管理re_path(r‘^menu/list/$‘,menu.menu_list,name=‘menu_list‘),re_path(r‘^menu/add/$‘,menu.menu_add,name=‘menu_add‘),re_path(r‘^menu/edit/(?P<pk>d+)‘,m... 查看详情

vue基于d2-admin的rbac权限管理解决方案(代码片段)

...分离架构设计系列一权限模型篇实现了RBAC模型权限控制菜单与路由独立管理,完全由后端返回user存储用户admin标识用户是否为系统管理员role存储角色信息roleUser存储用户与角色的关联关系menu存储菜单信息,类型分为菜单与功能... 查看详情

基于角色权限管理:rbac设计分析以及具体细节(代码片段)

...,我们现在来看看具体操作。 目标:生成一个独立的组件,到哪都能用!(是不是很厉害) 步骤一、先创建一个项目,建立一个app01和rbac的应用二、表结构的设计  1、先看配置文件合 查看详情