文章目录
2019-1-29 21:20:30
权限表设计
- 权限表关系
- 下图为权限管理的通用模型,不过在企业开发中根据系统自身特点还会对上图进行修改
- 但是用户、角色(岗位)、权限、用户角色关系、角色权限关系是必不可少的。
- modles设计
#modles.py
class UserInfo(models.Model):
username = models.CharField(max_length=32,blank=True,null=True,verbose_name='用户名')
password = models.CharField(max_length=32,blank=True,null=True,verbose_name='密码')
roles = models.ManyToManyField('Role', verbose_name='用户拥有的角色', blank=True)
def __str__(self):
return self.username
class Role(models.Model):
"""
角色表
"""
name = models.CharField(max_length=32, verbose_name='名称')
permissions = models.ManyToManyField('Permission', verbose_name='角色拥有的权限', blank=True)
def __str__(self):
return self.name
class Permission(models.Model):
"""
权限表
可以做二级菜单的权限 menu 关联 菜单表
不可以做菜单的权限 menu=null
"""
url = models.CharField(max_length=32, verbose_name='权限')
title = models.CharField(max_length=32, verbose_name='标题')
menu = models.ForeignKey('Menu', null=True, blank=True)
# 自己关联自己
parent = models.ForeignKey('self', null=True, blank=True)
# 写法二
# parent = models.ForeignKey('Permission', null=True, blank=True)
name = models.CharField(max_length=32, verbose_name='URL别名')
class Meta:
verbose_name_plural = '权限'
verbose_name = '权限'
def __str__(self):
return self.title
class Menu(models.Model):
"""
菜单表 一级菜单
"""
title = models.CharField(max_length=32)
icon = models.CharField(max_length=64, null=True, blank=True, verbose_name='图标')
# 默认值为1
weight = models.IntegerField(default=1, verbose_name='显示权重')
def __str__(self):
return self.title