rbac是基于角色的权限设计,一共包含六张表,具体的表设计如下:

from django.db import models

class Menu(models.Model):
"""
菜单表
"""
title = models.CharField(verbose_name='菜单名称',max_length=32,unique=True)
icon = models.CharField(max_length=128, blank=True, null=True) def __str__(self):
return self.title class Permission(models.Model):
"""
权限表
"""
title = models.CharField(verbose_name='权限标题', max_length=32)
url = models.CharField(verbose_name='含正则的URL', max_length=128)
name=models.CharField(verbose_name='url别名',max_length=64,unique=True) #控制权限到按钮
parent=models.ForeignKey(verbose_name='父权限',to='self',null=True,blank=True,on_delete=models.CASCADE,limit_choices_to={'parent__isnull':True})#构建非菜单权限关系,菜单默认展开
menu=models.ForeignKey(verbose_name='菜单',to='Menu',null=True,blank=True,on_delete=models.CASCADE) def __str__(self):
return self.title class Role(models.Model):
"""
角色
"""
title = models.CharField(verbose_name='角色名称', max_length=32)
permissions = models.ManyToManyField(verbose_name='拥有的所有权限', to='Permission', blank=True) def __str__(self):
return self.title class UserInfo(models.Model):
"""
用户表
"""
username = models.CharField(verbose_name='用户名', max_length=32)
password = models.CharField(verbose_name='密码', max_length=64)
email = models.CharField(verbose_name='邮箱', max_length=32)
roles = models.ManyToManyField(verbose_name='拥有的所有角色', to=Role, blank=True) class Meta:
abstract=True #为了crm的用户表进行继承 def __str__(self):
return self.username

其中用户表和角色表是多对多的关系、角色表和权限表是多对多的关系。另外权限表关联菜单,这样某一个权限url挂载某一个菜单下,并且权限表关联自身,这样比如增加、删除、修改的权限url又可以挂在某一个权限url下面。

最新文章

  1. mysql 定义function rand
  2. C#面向对象的三大特性
  3. Linux:设置alias永久生效
  4. ControlStyles(枚举)
  5. z-index要同级比较,absolute包含块外有overflow-hidden
  6. vector的成员函数解析
  7. SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
  8. 处理动态SQL语句的参数
  9. Git工作流:中心工作流(翻译)
  10. 关于模型的合法性,Entity.IsValid()合理吗?
  11. angular.js ng-repeat渲染时出现闪烁问题解决
  12. 安徽省2016“京胜杯”程序设计大赛_I_恶魔A+B
  13. [Swift]LeetCode144. 二叉树的前序遍历 | Binary Tree Preorder Traversal
  14. java关于get/post请求
  15. .gitinore配置失效问题
  16. iconv: iconv_open(pToCharset, pFromCharset); 的附加参数//IGNORE
  17. Python11/12--GIL/互斥锁/进程池
  18. 如何用impress.js写有逼格的ppt
  19. hdu4705 Y 树形DP
  20. 【转】[Android] NDK独立编译——独立工具链

热门文章

  1. CF915E Physical Education Lessons(珂朵莉树)
  2. jQuery笔记之animate中的queue
  3. sublime 解决中文乱码
  4. treap板子(洛谷 P3369 【模板】普通平衡树(Treap/SBT))
  5. ACM_数数?诶?这么简单?
  6. python general
  7. 467 Unique Substrings in Wraparound String 封装字符串中的独特子字符串
  8. JSP页面自动刷新
  9. SQL快速备份
  10. Android 实现对多个EditText的监听