一、权限
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. 论文翻译_Tracking The Untrackable_Learning To Track Multiple Cues with Long-Term Dependencies_IEEE2017

    Tracking The Untrackable: Learning to Track Multiple Cues with Long-Term Dependencies 跟踪不可跟踪:学习跟踪具有长 ...

  2. android:保存用户名密码等应用程序数据

    转自http://blog.sina.com.cn/s/blog_a73687bc0101dsjj.html (一)使用SharedPreferences  1.保存信息: SharedPrefere ...

  3. lintcode-87-删除二叉查找树的节点

    87-删除二叉查找树的节点 给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点.如果树中没有相同值的节点,就不做任何处理.你应该保证处理之后的树仍是二叉查找树. 样例 给出如下二叉查找树: ...

  4. iOS-开发,拨打电话

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"te ...

  5. 算法(1)K-diff Pairs in an Array

    写在前面:研究操作系统,习惯了用C,但是在做算法题甚至构建大型系统时,C真的是噩梦.还是用C++比较好,基本算法很成熟,并可基于此实现更复杂的算法.那就边写算法边捡起来好久不用的C++吧! 题目:数组 ...

  6. 周记【距gdoi:96天】

    倒计时从三位数变成了两位数. 然后这周还是很不知道怎么说,经常写一道题写两天.但是总算把后缀数组写完了,也整理完了. 然后周末都不知道干了什么周末就过去了.无聊看了两道省选题发现都是不会做系列,看了以 ...

  7. linux管理(二)---网络使用情况的监控

    我们经常在监控服务器或者排查程序性能瓶颈时需要知道  网络带宽的使用情况,看看带宽是不是瓶颈. linux系统中监控网络的工具和命令很多. 但其实主要分2种,一种是实时监控带宽情况(速度如何),一种是 ...

  8. Codeforces Round #532 (Div. 2) 题解

    Codeforces Round #532 (Div. 2) 题目总链接:https://codeforces.com/contest/1100 A. Roman and Browser 题意: 给出 ...

  9. ansible 批量修改root密码

    [root@sz_fy_virt_encrypt_33_239 fetch]# cat /opt/passwd.yml - hosts: web vars: path: /home/opsadmin ...

  10. 函数实现多个按钮控制一个div

    <!DOCTYPE HTML><html><head> <meta http-equiv="txttent-Type" txttent=& ...