Django框架–权限表设计

内容简介:models中创建类:五个类,七张表角色表和权限表是多对多的关系(一个角色可以有多个权限,一个权限可以对应多个角色);用户表和角色表是多对多的关系(一个用户可以有多个角色,一个角色有多个用户);

一、设计表结构

models中创建类:五个类,七张表

  • 角色表:
  • 用户表:
  • 权限表:
  • 权限组表:
  • 菜单表:

角色表和权限表是多对多的关系(一个角色可以有多个权限,一个权限可以对应多个角色);

用户表和角色表是多对多的关系(一个用户可以有多个角色,一个角色有多个用户);

所以有会多生成两张关系表;

一个菜单下面有多个组;

一个组下面有多个菜单;

一个菜单下面有多个权限;

###################权限部分

class UserInfo(models.Model):       ##用户表
    name = models.CharField(max_length=16, blank=True, null=True, verbose_name="用户名")
    password = models.CharField(max_length=128, blank=True, null=True, verbose_name="密码")
    email = models.CharField(max_length=32, verbose_name="邮箱")
    userPosition = models.ForeignKey(to="Position", blank=True, null=True, verbose_name="职位", related_name="userposi")  # 用户和职位是一对多的关系

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "用户表"


class Position(models.Model):       ##职位表
    name = models.CharField(max_length=16, blank=True, null=True, verbose_name="职位名")
    auth = models.ManyToManyField(to='Auth', blank=True, null=True, verbose_name="权限", related_name="posauth")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "职位表"


class Auth(models.Model):           ##权限表
    name = models.CharField(max_length=64, blank=True, null=True, verbose_name="显示路径名")
    url = models.CharField(max_length=64, blank=True, null=True, verbose_name="路径")
    groupauth = models.ForeignKey(to='AuthGroup', blank=True, null=True, verbose_name="组权限", related_name="authgroup")      #组和权限是一对多的关系,一个组有多个权限


    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "权限表"  

三级权限表结构设计
#角色表
CREATE TABLE `sp_role` (
  `role_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `role_name` varchar(20) NOT NULL COMMENT '角色名称',
  `ps_ids` varchar(512) NOT NULL DEFAULT '' COMMENT '权限ids,1,2,5',
  `ps_ca` text COMMENT '控制器-操作,控制器-操作,控制器-操作',
  `role_desc` text,
  PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;

#权限表
DROP TABLE IF EXISTS `sp_permission`;
CREATE TABLE `sp_permission` (
  `ps_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `ps_name` varchar(20) NOT NULL COMMENT '权限名称',
  `ps_pid` smallint(6) unsigned NOT NULL COMMENT '父id',
  `ps_c` varchar(32) NOT NULL DEFAULT '' COMMENT '控制器',
  `ps_a` varchar(32) NOT NULL DEFAULT '' COMMENT '操作方法',
  `ps_level` enum('0','2','1') NOT NULL DEFAULT '0' COMMENT '权限等级',
  PRIMARY KEY (`ps_id`)
) ENGINE=InnoDB AUTO_INCREMENT=160 DEFAULT CHARSET=utf8 COMMENT='权限表';

#用户表
DROP TABLE IF EXISTS `sp_manager`;
CREATE TABLE `sp_manager` (
  `mg_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `mg_name` varchar(32) NOT NULL COMMENT '名称',
  `mg_pwd` char(64) NOT NULL COMMENT '密码',
  `mg_time` int(10) unsigned NOT NULL COMMENT '注册时间',
  `role_id` tinyint(11) NOT NULL DEFAULT '0' COMMENT '角色id',
  `mg_mobile` varchar(32) DEFAULT NULL,
  `mg_email` varchar(64) DEFAULT NULL,
  `mg_state` tinyint(2) DEFAULT '1' COMMENT '1:表示启用 0:表示禁用',
  PRIMARY KEY (`mg_id`)
) ENGINE=InnoDB AUTO_INCREMENT=510 DEFAULT CHARSET=utf8 COMMENT='管理员表';

#权限API
CREATE TABLE `sp_permission_api` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ps_id` int(11) NOT NULL,
  `ps_api_service` varchar(255) DEFAULT NULL,
  `ps_api_action` varchar(255) DEFAULT NULL,
  `ps_api_path` varchar(255) DEFAULT NULL,
  `ps_api_order` int(4) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ps_id` (`ps_id`)
) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8;

 用户表

角色表


权限表

 权限API表


参考:https://www.codercto.com/a/56577.html




原文地址:https://www.cnblogs.com/weidaijie/p/12658482.html