码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2019-06-01 10:04:24      阅读:116      评论:0      收藏:0      [点我收藏+]

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

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

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

 

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

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

原文地址:https://www.cnblogs.com/shenjianping/p/10953793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!