一、权限
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. localStorage简析

    声明:引用自http://www.cnblogs.com/st-leslie/p/5617130.html 一.什么是localStorage.sessionStorage 在HTML5中,新加入了一 ...

  2. browsersync的安装与基本使用

    browser-sync启动命令 Browsersync能让浏览器实时.快速响应您的文件更改(html.js.css.sass.less等)并自动刷新页面. 官网文档:http://www.brows ...

  3. 【page.js】配置及Page函数说明

    页面.js中的Page函数用来注册一个页面,指定页面的初始数据.生命周期回调.事件处理函数等. 语法:Page(Object)参数: Object json对象 Page({ /** * data * ...

  4. (原创)白话KMP算法(续)

    第二章:KMP改良算法 第一章里面我们讲完了KMP算法的next数组实现法,回忆一下其实最重要的内容无非就是一.理解 i 指针无用回溯的意义,二.理解 j 指针的定位和模式串中每个元素重复度的关系,三 ...

  5. LeetCode - 66. Plus One(0ms)

    Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The ...

  6. struts2 下载文件

    作者:禅楼望月 当下载的文件名字中不含有汉字,或者下载的文件不需要考虑用户的权限问题时.直接让超链接的href属性为所要下载的文件名即可.否则最好使用struts2的文件下载机制. 以下载图片为例 完 ...

  7. online community

    online community spectrum https://spectrum.chat/xgqfrms https://community.xgqfrms.xyz/ https://spect ...

  8. JS frame 跨域 传值

    1.在index.html 页面定义一个 函数用于接收 子页面的调用. <iframe id="common_iframe" class="common_conte ...

  9. Spark分布式执行原理

    Spark分布式执行原理 让代码分布式运行是所有分布式计算框架需要解决的最基本的问题. Spark是大数据领域中相当火热的计算框架,在大数据分析领域有一统江湖的趋势,网上对于Spark源码分析的文章有 ...

  10. sessionStorage的用法总结

    sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁.因此sessionStorage不是一种持久化的本地 ...