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

最新文章

  1. .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?
  2. Elasticsearch的CRUD:REST与Java API
  3. 前端MVVM框架设计及实现(二)
  4. Linux系统简介
  5. MySQL JDBC 出现多个 SHOW VARIABLES 语句。
  6. 什么是java path环境变量
  7. 简答的理解C语言中的各种类型函数
  8. mvc从xheditor编辑器中获取内容时存在潜在危险
  9. Ubuntu常见问题
  10. JQuery表格展开与内容筛选
  11. VC Office2007界面对话框实现
  12. Codeforces 432E Square Tiling(结构体+贪婪)
  13. Java经典案例之-“成绩等级划分”
  14. 期望$DP$ 方法总结
  15. Codeforces Gym100783H 最短路 其他
  16. mybatis04--Mapper动态代理实现
  17. Sql Server 2008 数据库18456错误怎么解决?
  18. 20170914xlVBA通讯公司分类汇总
  19. 跟着未名学 - 免费录屏工具ActivePresenter
  20. 【llinux】yum命令出现Loaded plugins: fastestmirror Determining fastest mirrors

热门文章

  1. Unable to connect to zookeeper server within timeout: 5000
  2. Matlab实现BP网络识别字母
  3. Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期
  4. ArcGIS中的WKID(转)
  5. 吴裕雄 13-MySQL UPDATE 查询
  6. 文字在线转图片二维码的公用API接口
  7. CentOS6编译安装php5.3
  8. Failed to acquire connection "SAP_PRD_NEW.SAPSR3". Connection may not be configured correctly or you may not have the right permissions
  9. metasploit framework(八):snmp扫描,暴力破解
  10. 【翻译】View Frustum Culling --2 Geometric Approach – Extracting the Planes