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

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

  • 相关阅读:
    自我介绍
    学习进度第二周
    [BJDCTF2020]Easy MD5
    2020/2/13 bluecmsv1.6sp1代码审计
    [CISCN2019 总决赛 Day1 Web4]Laravel1
    [ByteCTF 2019]EZCMS
    2020/2/12 PHP编程学习
    [XNUCA2019Qualifier]EasyPHP
    [RoarCTF 2019]Online Proxy
    [GXYCTF2019]BabySQli
  • 原文地址:https://www.cnblogs.com/shenjianping/p/10953793.html
Copyright © 2020-2023  润新知