一、权限
RBAC:role basic access control
 
1、什么是权限:
一个权限就是一个url,不同个权限对应不同的url,拥有权限即可以访问这个url。

 
2、权限划分:
如果以每个人来划分权限,分配的时候回非常麻烦,特别是权限和人都非常多的时候
以角色来划分权限
 
二、做一个简单权限管理系统

创建数据模型

 
 
############# 重点:我们做一个用于权限管理的app,可移植到其他项目 ###############
 
添加app,rbac是除了app01另外创建的应用,专用于权限管理,后面可以移植到其他项目
python manage.py startapp rbac

 

然后在settings的INSTALLED_APPS配置中加入‘rbac'

 
 
将表注册到admin,当然是’rbac'的admin中

 
创建管理员python manage.py createsuperuser
 
 
admin后台添加菜单,以及其他数据
127.0.0.1:8000/admin
 
urls

 
views(app01/views,调用rbac应用来实现权限功能)

 
 
##################### 这里给rbac写一个配套的初始化权限的服务 ###################
 
写一个专门用于获取用户权限的初始化服务
from django.conf import settings
from .. import models def init_permission(request,user_obj):
"""
初始化用户权限
:param request:
:param user_obj:
:return:
""" # distinct()去掉重复,values可以取roles对应的多对多的表的字段
permission_item_list = user_obj.roles.values('permissions__title','permissions__url',
'permissions__menu_id').distinct() # 保存当前用户有权访问的URL
permission_url_list = [] # 保存当前用户有权访问的URL且需要在菜单上显示
permission_menu_list = [] for item in permission_item_list:
"""
循环这个query_set集合,取需要的数据
"""
permission_url_list.append(item['permissions__url']) if item['permissions__menu_id']:
temp = {'title':item['permissions__title'],'url':item['permissions__url'],
'menu_id':item['permissions__menu_id']}
permission_menu_list.append(temp) # 所有菜单
menu_lsit = list(models.Menu.objects.values('caption','parent_id')) request.session[settings.SESSION_PERMISSION_URL_KEY] = permission_url_list
request.session[settings.SESSION_PERMISSION_MENU_URL_KEY] = {
settings.PERMISSION_URL_KEY:permission_menu_list,
settings.ALL_MENU_KEY: menu_lsit, }

  

 
 
################ 为了写入session方便,我们在settings配置session键 ########################
#########################################################
# rbac 权限相关配置 #
######################################################### # 保存用户权限的session key
SESSION_PERMISSION_URL_KEY = "sanhdfiuhasakdjflkajsf"
SESSION_PERMISSION_MENU_URL_KEY = "sjdiuwekljdsksdfjlskdsd"
ALL_MENU_KEY = "k1"
PERMISSION_URL_KEY = "k2"

  

 
 
中间件应用
对请求进行判断,无权限直接退出,登录页面除外
作业以上

Django【进阶】权限管理的更多相关文章

  1. Django之权限管理

    Django权限管理之初步完整版 项目背景:这是一个权限管理系统(给一些角色和他们的权限指URL和页面可以删除的按钮比如:增删改查) 使用到了中间件,和初始化权限,使用了admin的后台管理系统. 我 ...

  2. Django框架----权限管理(设计分析以及具体细节)

    说起权限我们大家都知道,不一样的角色会有不一样的权限.比如就像学生管理系统一样,管理员,老师,学生之间的权限都是不一样的,那么展示的页面也是不一样的.所以,我们现在来看看具体操作. 目标:生成一个独立 ...

  3. Django之权限管理插件

    一.功能分析: 一个成熟的web应用,对权限的控制.管理是不可少的:对于一个web应用来说是什么权限? 这要从web应用的使用说起,用户在浏览器输入一个url,访问server端,server端返回这 ...

  4. [Django]用户权限学习系列之权限管理界面实现

    本系列前三章: http://www.cnblogs.com/CQ-LQJ/p/5604331.htmlPermission权限基本操作指令 http://www.cnblogs.com/CQ-LQJ ...

  5. [Django]用户权限学习系列之设计自有权限管理系统设计思路

    若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...

  6. django 基于proxy实现用户权限管理

    项目中经常会遇到用户权限管理的问题,django adminsite已经提供非常实用的用户权限管理机制.不过有些时候,我们希望根据相关用户属性来过滤adminsite中显示的内容.下文将结束如何实现: ...

  7. 【Python】django权限管理

    参考:http://www.cnblogs.com/esperyong/ 参考:https://docs.djangoproject.com/en/1.8/topics/auth/default/#t ...

  8. Django实现Rbac权限管理

    权限管理 权限管理是根据不同的用户有相应的权限功能,通常用到的权限管理理念Rbac. Rbac 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问, ...

  9. Django学习手册 - 权限管理(一)

    权限管理原理: 不同角色拥有不同的角色权限,所以能否访问的页面也就不相同. 通过控制URL使用户访问到不同的URL,从而达到权限控制的目的. 设计权限数据库 权限管理 from django.db i ...

随机推荐

  1. 命令行下对apk签名

    l创建key,需要用到keytool.exe (位于jdk安装目录\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk安装目录\bin目录下),把上两个软件所 ...

  2. 解决Unbuntu终端菱形乱码问题

    原因:安装时为了学习方便选择中文安装,其字符编码相关配置如下(在/etc/default/locale中) LANG="Zh_CN.UTF-8 "LANGUAGE="zh ...

  3. zabbix从入门到精通

    第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也 ...

  4. Spring Cloud文档地址大全

    Spring Cloud:http://cloud.spring.io/spring-cloud-static/spring-cloud.html Spring Cloud Config:http:/ ...

  5. python完成简单购物功能

    # # -*- coding: utf8 -*- # # Author:wxq # # date:2017/11/13 # # python 3.6 # 创建一个商品列表: product_lis = ...

  6. 最短路径——Dijkstra算法

    一.相关定义 最短路径:从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径. 地位:Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据 ...

  7. 利用java中的BigInteger实现进制转换

    [原创] java中的进制BigInteger十分的强大,而且好用,他可以表示任意大的整数,同时还可以进行进制转换,十分的方便, 代码示例: package com.jiajia.demo_1; im ...

  8. HighCharts中几种tooltip的显示格式

    推荐学习地址 => https://www.hcharts.cn/docs/basic-tooltip   https://api.hcharts.cn/#Highcharts.numberFo ...

  9. PHP判断类型的方法

    1.gettype():获取变量类型 2.is_array():判断变量类型是否为数组类型 3.is_double():判断变量类型是否为倍浮点类型 4.is_float():判断变量类型是否为浮点类 ...

  10. 偶遇RandomAccessFile

    一.前言 本来在研究NIO,别人举的栗子里面,看到一个RandomAccessFile类,之前没见过,就去看了一下,现将相关内容记录如下 二.正文 RandomAccessFile直接继承自Objec ...