rbac(Role-Based Access Control基于角色的权限控制)

1.数据库设计

rbac (Role-Based Access Control基于角色的权限控制)

在这里插入图片描述

1.表结构设计

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.添加models

from django.db import models


class Permission(models.Model):
    """
    权限表
    """
    title = models.CharField(verbose_name='标题', max_length=32)
    url = models.CharField(verbose_name='含正则的URL', max_length=128)

    def __str__(self):
        return self.title


class Role(models.Model):
    """
    角色
    """
    title = models.CharField(verbose_name='角色名称', max_length=32)
    permissions = models.ManyToManyField(verbose_name='拥有的所有权限', to='Permission', blank=True)

    def __str__(self):
        return self.title


class UserInfo(models.Model):
    """
    用户表
    """
    name = models.CharField(verbose_name='用户名', max_length=32)
    password = models.CharField(verbose_name='密码', max_length=64)
    email = models.CharField(verbose_name='邮箱', max_length=32)
    roles = models.ManyToManyField(verbose_name='拥有的所有角色', to='Role', blank=True)

    def __str__(self):
        return self.name

注意:

1.数据库迁移

3.后台数据录入

那么接下来,我们就在权限组件中录入相关信息:

  • 录入权限
  • 创建用户
  • 创建角色
  • 用户分配角色
  • 角色分配权限

以上简易版客户管理系统中的 URL 有:

  • 客户管理

    功能url
    客户列表/customer/list/
    添加客户/customer/add/
    删除客户/customer/list/(?P\d+)/
    修改客户/customer/edit/(?P\d+)/
    批量导入/customer/import/
    下载模板/customer/tpl/
  • 账单管理

    功能url
    账单列表/payment/list/
    添加账单/payment/add/
    删除账单/payment/del/(?P\d+)/
    修改账单/payment/edit/<?P\d+/

rbac_permission表

INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (1, '客户列表', '/customer/list/');
INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (2, '添加客户', '/customer/add/');
INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (3, '删除客户', '/customer/list/(?P<cid>\\d+)/');
INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (4, '修改客户', '/customer/edit/(?P<cid>\\d+)/');
INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (5, '批量导入', '/customer/import/');
INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (6, '下载模板', '/customer/tpl/');
INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (7, '账单列表', '/payment/list/');
INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (8, '添加账单', '/payment/add/');
INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (9, '删除账单', '/payment/del/(?P<pid>\\d+)/');
INSERT INTO `crm`.`rbac_permission`(`id`, `title`, `url`) VALUES (10, '修改账单', '/payment/edit/<?P<pid>\\d+/');

rbac_role表

INSERT INTO `crm`.`rbac_role`(`id`, `title`) VALUES (1, 'CEO');
INSERT INTO `crm`.`rbac_role`(`id`, `title`) VALUES (2, 'CTO');
INSERT INTO `crm`.`rbac_role`(`id`, `title`) VALUES (3, '总监');

rbac_role_permission表

INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (1, 1, 1);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (2, 1, 2);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (3, 1, 3);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (4, 1, 4);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (5, 1, 5);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (6, 1, 6);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (7, 1, 7);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (8, 1, 8);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (9, 1, 9);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (10, 1, 10);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (11, 2, 1);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (12, 2, 2);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (13, 2, 5);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (14, 2, 6);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (15, 2, 7);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (16, 2, 8);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (17, 3, 1);
INSERT INTO `crm`.`rbac_role_permissions`(`id`, `role_id`, `permission_id`) VALUES (18, 3, 7);

rbac_userinfo表

INSERT INTO `crm`.`rbac_userinfo`(`id`, `name`, `password`, `email`) VALUES (1, '唐三', 'tangsan', 'tangsan@163.com');
INSERT INTO `crm`.`rbac_userinfo`(`id`, `name`, `password`, `email`) VALUES (2, '荣儿', 'ronger', 'ronger@163.com');
INSERT INTO `crm`.`rbac_userinfo`(`id`, `name`, `password`, `email`) VALUES (3, '胖子', 'pangzi', 'pangzi@163.com');

rbac_userinfo_roles表

INSERT INTO `crm`.`rbac_userinfo_roles`(`id`, `userinfo_id`, `role_id`) VALUES (1, 1, 1);
INSERT INTO `crm`.`rbac_userinfo_roles`(`id`, `userinfo_id`, `role_id`) VALUES (2, 2, 2);
INSERT INTO `crm`.`rbac_userinfo_roles`(`id`, `userinfo_id`, `role_id`) VALUES (3, 3, 3);

2.权限控制

1.快速实现简单权限控制

在这里插入图片描述

2.实现动态菜单之一级菜单

1.修改表结构

1.新增is_menu:指定是否展示在菜单中,icon:指定图标
2.font-awesome(前提引入相应的css)glyphicon glyphicon-user,glyphicon glyphicon-list-alt
3.录入菜单数据

2.业务逻辑

#1.中间件判断当前用户有哪些权限,以及相应的菜单信息,并存到相应的session中
#2.视图函数读取相应的菜单信息并进行模板渲染展示
#3.自定义模板标签,新建templatetags/rbac.py

在这里插入图片描述

1.改变表结构(is_menu,icon(font-awesome))

在这里插入图片描述

3.动态菜单之二级菜单

在这里插入图片描述

#1.确定菜单数据的格式
#2.模型类新建menu类和修改permission类
#3.路人菜单menu菜单数据(信息管理(单反),用户管理(火焰))
#4.在layout.heml添加mutlimenu.css
#5.新建mutlimenu标签
#6.添加js.的收缩的插件(static/css,js)在layout中引入css,js
#7.二级菜单排序

3.动态菜单之非菜单

在这里插入图片描述

1.models中pid
2.init_permission中的格式
3.中间件中的request.current_selectd_permission
4.自定义标签

在这里插入图片描述
(picture/image-20210728072957115.png)]

4.动态菜单之路径导航

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值