day2 crm客户管理之权限控制设计
学习知识最好的方式就是试错,坑踩多了那么学到的知识自然而然就多了,所以接下里下来我们用《客户管理》系统为示例,提出功能并实现,并且随着功能越来越多,一点点来找出问题,并解决问题。
目录结构:
orm创建表结构
rbac/models.py
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
web/models.py
from django.db import models
# Create your models here.
class Customer(models.Model):
"""
客户表
"""
name = models.CharField(verbose_name='姓名', max_length=32)
age = models.CharField(verbose_name='年龄', max_length=32)
email = models.EmailField(verbose_name='邮箱', max_length=32)
company = models.CharField(verbose_name='公司', max_length=32)
class Payment(models.Model):
"""
付费记录
"""
customer = models.ForeignKey(verbose_name='关联客户', to='Customer',on_delete=models.CASCADE)
money = models.IntegerField(verbose_name='付费金额')
create_time = models.DateTimeField(verbose_name='付费时间', auto_now_add=True)
《客户管理》系统截图
以上简易版客户管理系统中的URL有:
####客户管理
客户列表:/customer/list/
添加客户:/customer/add/
删除客户:/customer/list/(?P\d+)/
修改客户:/customer/edit/(?P\d+)/
批量导入:/customer/import/
下载模板:/customer/tpl/
####账单管理
账单列表:/payment/list/
添加账单:/payment/add/
删除账单:/payment/del/(?P\d+)/
修改账单:/payment/edit/(?P\d+)/
那么接下来,我们就在权限组件中录入相关信息:
录入权限
创建用户
创建角色
用户分配角色
角色分配权限