前后端分离进行权限管理之后端表结构设计(一)

一、表结构设计

from django.db import models

# Create your models here.
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)
    position = models.IntegerField(blank=True,null=True)

    def __str__(self):
        return self.title

class Action(models.Model):
    """
    操作:增删改查
    """
    title = models.CharField(verbose_name='操作标题', max_length=32)
    code = models.CharField(verbose_name='方法', max_length=32)

    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)
    action=models.ForeignKey(verbose_name='操作',to='Action',null=True,blank=True,on_delete=models.CASCADE) 
    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)
    desc = models.CharField(verbose_name='角色描述',max_length=64,null=True,blank=True)
    permissions = models.ManyToManyField(verbose_name='拥有的所有权限', blank=True,to='Permission')


    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,related_name="roles", blank=True)

    class Meta:
        abstract=True

    def __str__(self):
        return self.username

二、表结构说明

上述有5张表,但因为用户表与角色表、角色表与权限表都是多对多的关系,故而会多生成2张表。

1、菜单表(Menu)

是主页右侧的菜单,它的下面是所有的get方式的权限url

2、请求方式表(Action)

是所有请求url的请求方式,在页面上的表现就是增加、修改、删除这种按钮

3、权限表(Permission)

是每一个请求的url,在页面上的表示就是所有的页面以及页面上对应的增、删、改的按钮

4、角色表(Role)

每一个用户拥有的角色

5、用户表

所有的用户信息

6、用户角色表

根据用户表和角色表的多对多关系生成的第3张表,它呈现了用户和角色的对应关系

7、角色权限表

根据权限表和角色表的多对多关系生成的第3张表,它呈现了权限和角色的对应关系

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