RBAC
用户与角色 多对多 角色与权限 多多多 权限和权限组 多对一 菜单和权限组 一对多
# 用户
class UserInfo(models.Model):
name = models.CharField(max_length=32)
pwd = models.CharField(max_length=32, default=123)
email = models.EmailField()
roles = models.ManyToManyField(to="Role")
def __str__(self):
return self.name
# 角色
class Role(models.Model):
title = models.CharField(max_length=32)
permissions = models.ManyToManyField(to="Permission")
def __str__(self):
return self.title
# 权限表(如增删改查)
class Permission(models.Model):
url = models.CharField(max_length=32)
title = models.CharField(max_length=32)
permission_group = models.ForeignKey("PermissionGroup", default=1)
code = models.CharField(max_length=32, default="")
<!-- 当某个权限不需要在菜单栏展示,我们就给他一个parent,这样访问他时,对应的parent权限在菜单栏就会变色 -->
parent = models.ForeignKey("self", default=1, null=True, blank=True)
# 权限组表
class PermissionGroup(models.Model):
caption = models.CharField(max_length=32)
menu = models.ForeignKey("Menu", default=1)
# 菜单表
class Menu(models.Model):
sord_num = models.CharField(max_length=32)
caption = models.CharField(max_length=32)
def __str__(self):
return self.caption
{
}
使用api.representation装饰器声明content-type
参考: https://www.shuzhiduo.com/A/kvJ34Aeg5g/
# 当要返回的数据类型是这里定义的 content-type 的时候,会执行这里的函数
@api.representation('text/html')
def output_html(data, code, headers):
"""
在representation装饰的函数中,必须放回一个Response对象
"""
resp = Response(data)
return resp
Last updated