rbac 表结构的。设计
1. 问:为什么程序需要权限控制?
答:生活中的权限限制,① 看灾难片电影《2012》中富人和权贵有权登上诺亚方舟,穷苦老百姓只有等着灾难的来临;② 屌丝们,有没有想过为什么那些长得漂亮身材好的姑娘在你身边不存在呢?因为有钱人和漂亮姑娘都是珍贵稀有的,稀有的人在一起玩耍和解锁各种姿势。而你,无权拥有他们,只能自己玩自己了。
程序开发时的权限控制,对于不同用户使用系统时候就应该有不同的功能,如:
- 普通员工
- 部门主管
- 总监
- 总裁
所以,只要有不同角色的人员来使用系统,那么就肯定需要权限系统。
2. 问:为什么要开发权限组件?
答:假设你今年25岁,从今天开始写代码到80岁,每年写5个项目,那么你的一生就会写275个项目,保守估计其中应该有150+个都需要用到权限控制,为了以后不再重复的写代码,所以就开发一个权限组件以便之后55年的岁月中使用。
亲,不要太较真哦,你觉得程序员能到80岁么,哈哈哈哈哈哈哈
偷偷告诉你:老程序员开发速度快,其中一个原因是经验丰富,另外一个就是他自己保留了很多组件,新系统开发时,只需把组件拼凑起来基本就可以完成。
3. 问:web开发中权限指的是什么?
答:web程序是通过 url 的切换来查看不同的页面(功能),所以权限指的其实就是URL,对url控制就是对权限的控制。
结论:一个人有多少个权限就取决于他有多少个URL的访问权限。
根据这个结论 从而进行,表的创建。 先分析一波:
Role Base Action Contorl
User 用户, Role 角色 , permission 权限。
所以需要三张基表:1.User 用户表。2.Role 角色表,3.Permission 权限表。
进而确定,表关系:
一个用户可以是多个角色,每个角色也可以由多个用户担任: User表 与 Role表 为 多对多关系。 创建关系表 User2Role
一个角色可以有多个权限,每个权限也可以让多个角色拥有: Role表 与 Permission表 为 多对多关系。创建关系表 Role2Permission
表结构设计:
复制代码 from django.db import models class Permission(models.Model):
"""
权限表
"""
title = models.CharField(verbose_name='标题', max_length=32)
url = models.CharField(verbose_name='含正则的URL', max_length=128) 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):
"""
用户表
"""
name = 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) def __str__(self):
return self.name 复制代码
目录结构:
luffy_permission/
├── db.sqlite3
├── luffy_permission
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── rbac # 权限组件,便于以后应用到其他系统
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── templates
└── web # 客户管理业务
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
└── views.py
最新文章
- .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?
- Elasticsearch的CRUD:REST与Java API
- 前端MVVM框架设计及实现(二)
- Linux系统简介
- MySQL JDBC 出现多个 SHOW VARIABLES 语句。
- 什么是java path环境变量
- 简答的理解C语言中的各种类型函数
- mvc从xheditor编辑器中获取内容时存在潜在危险
- Ubuntu常见问题
- JQuery表格展开与内容筛选
- VC Office2007界面对话框实现
- Codeforces 432E Square Tiling(结构体+贪婪)
- Java经典案例之-“成绩等级划分”
- 期望$DP$ 方法总结
- Codeforces Gym100783H 最短路 其他
- mybatis04--Mapper动态代理实现
- Sql Server 2008 数据库18456错误怎么解决?
- 20170914xlVBA通讯公司分类汇总
- 跟着未名学 - 免费录屏工具ActivePresenter
- 【llinux】yum命令出现Loaded plugins: fastestmirror Determining fastest mirrors
热门文章
- Unable to connect to zookeeper server within timeout: 5000
- Matlab实现BP网络识别字母
- Android DevArt2:Android 5.0下 Dialog&;AlertDialog 并不会影响Activity的生命周期
- ArcGIS中的WKID(转)
- 吴裕雄 13-MySQL UPDATE 查询
- 文字在线转图片二维码的公用API接口
- CentOS6编译安装php5.3
- Failed to acquire connection ";SAP_PRD_NEW.SAPSR3";. Connection may not be configured correctly or you may not have the right permissions
- metasploit framework(八):snmp扫描,暴力破解
- 【翻译】View Frustum Culling --2 Geometric Approach – Extracting the Planes