rbac组件之数据库设计(一)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
rbac组件之数据库设计(⼀)
rbac是基于⾓⾊的权限设计,⼀共包含六张表,具体的表设计如下:
from django.db import models
class Menu(models.Model):
"""
菜单表
"""
title = models.CharField(verbose_name='菜单名称',max_length=32,unique=True)
icon = models.CharField(max_length=128, blank=True, null=True)
def__str__(self):
return self.title
class Permission(models.Model):
"""
权限表
"""
title = models.CharField(verbose_name='权限标题', max_length=32)
url = models.CharField(verbose_name='含正则的URL', max_length=128)
name=models.CharField(verbose_name='url别名',max_length=64,unique=True) #控制权限到按钮
parent=models.ForeignKey(verbose_name='⽗权限',to='self',null=True,blank=True,on_delete=models.CASCADE,limit_choices_to={'parent__isnull':True})#构建⾮菜单权限关系,菜单默认展开 menu=models.ForeignKey(verbose_name='菜单',to='Menu',null=True,blank=True,on_delete=models.CASCADE)
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):
"""
⽤户表
"""
username = 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)
class Meta:
abstract=True #为了crm的⽤户表进⾏继承
def__str__(self):
return ername
其中⽤户表和⾓⾊表是多对多的关系、⾓⾊表和权限表是多对多的关系。
另外权限表关联菜单,这样某⼀个权限url挂载某⼀个菜单下,并且权限表关联⾃⾝,这样⽐如增加、删除、修改的权限url⼜可以挂在某⼀个权限url下⾯。