当前位置:Gxlcms > 数据库问题 > rbac组件之数据库设计(一)

rbac组件之数据库设计(一)

时间:2021-07-01 10:21:17 帮助过:3人阅读

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 self.username

其中用户表和角色表是多对多的关系、角色表和权限表是多对多的关系。另外权限表关联菜单,这样某一个权限url挂载某一个菜单下,并且权限表关联自身,这样比如增加、删除、修改的权限url又可以挂在某一个权限url下面。

 

rbac组件之数据库设计(一)

标签:多对多   span   角色   info   用户   key   bsp   choice   别名   

人气教程排行