内容简介: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