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
I can feel you forgetting me。。 有一种默契叫做我不理你,你就不理我