zoukankan      html  css  js  c++  java
  • 前后端分离进行权限管理之后端表结构设计(一)

    一、表结构设计

    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张表,它呈现了权限和角色的对应关系

  • 相关阅读:
    php基础语言
    cookie和setting
    php数据连接
    php连接sql
    php提交
    今天学习了php的数据类型
    第一天进入php,这只是自己的一个心情
    02-07 (2) 自连接
    内连接 和左连接查询 02-07 (1)
    out 和ref 的区别
  • 原文地址:https://www.cnblogs.com/shenjianping/p/11448404.html
Copyright © 2011-2022 走看看