django通用权限控制框架
在web项目中根据不同的用户肯定会限制其不同的权限,利用以下模块可以满足日常几乎所有的权限控制
permission_hook.py # 自定义权限控制,必须返回True/false ,True表示允许,false 拒绝
permission_list.py #根据url,访问方法及参数控制用户权限
permissions.py #先判断用户是否拥有permission_list.py中的权限,如果验证通过最后验证用户自定义权限。
实例:
permission_hook.p:
def check_self_user(request):
'''
用户只能筛选自己的客户 '''
if request.GET.get('consultant') == str(request.user.id):
return True
if request.GET.get('consultant'):
print('禁止查看非自己的客户')
return False return True
permission_list.py #根据url,访问方法及参数控制用户权限
from kingadmin import permission_hook
permission_dict={ 'crm_table_obj_list':['table_obj_list','GET',[],{},permission_hook.check_self_user],
'crm_table_obj_view':['table_obj_change','GET',[],{}],
'crm_table_obj_change':['table_obj_change','POST',[],{}]
}
permissions.py
from django.core.urlresolvers import resolve
from kingadmin.permission_list import permission_dict
from django.shortcuts import redirect,render,HttpResponse
from django.utils.safestring import mark_safe def check_permission(*args,**kwargs):
request=args[]
request_url=resolve(request.path).url_name
match_key=None
args_check=None
kwarg_check=None
if request.user.is_authenticated() is False:
return redirect('/login/') for permission_key,val in permission_dict.items():
print('执行args 权限检查-------------')
per_url=val[]
per_method=val[]
per_args=val[]
per_kwargs=val[]
per_hook_func=val[] if len(permission_dict[permission_key]) > else None if request_url == per_url:
if request.method == per_method:
args_check=False
for arg in per_args:
request_func=getattr(request,per_method)
if request_func.get(arg,None):
args_check=True
print('存在arg参数')
else:
print('不存在指定arg参数')
args_check=False
break
else:
print('未作权限限制,,默认通过')
args_check=True
kwarg_check=False for arg_name,arg_val in per_kwargs.items():
print('执行 kwargs 权限检查-------------')
request_func=getattr(request,per_method)
if request_func.get(arg_name) == str(arg_val):
kwarg_check=True
else:
kwarg_check=False
break
else:
kwarg_check=True
print('未作 kwargs 限制,默认通过') per_func=False
print('执行用户自定义钩子函数')
if per_hook_func:
per_func=per_hook_func(request)
else:
per_func=True per_res=[args_check,kwarg_check,per_func]
if all(per_res):
match_key=permission_key
print('权限匹配结果:',per_res)
break if all(per_res):
appname,*per_name=match_key.split('_')
per_obj='%s.%s'%(appname,match_key) if request.user.has_perm(per_obj):
print('所有权限检查通过')
return True
else:
print('权限检查未通过')
return False
else:
print('未匹配到权限')
return False def check_per(func):
def inner(*args,**kwargs):
if not check_permission(*args,**kwargs):
return HttpResponse(mark_safe('<h1>403 你没有相应的权限</h1>'))
else: return func(*args,**kwargs)
return inner
最后只需在views中将要使用权限控制功能的地方加上装饰器即可:
from kingadmin.permissions import check_per @check_per
def table_obj_change(request):
pass
django通用权限控制框架的更多相关文章
- vue-quasar-admin 一个包含通用权限控制的后台管理系统
vue-quasar-admin Quasar-Framework 是一款基于vue.js开发的开源的前端框架, 它能帮助web开发者快速创建以下网站:响应式网站,渐进式应用,手机应用(通过Cor ...
- Flex-Security权限控制框架
转自:http://code.google.com/p/flex-security/ flex UI组件权限控制框架 一.快速开始 1) 下载并添加flex_security.swf在你的flex l ...
- 3YAdmin-专注通用权限控制与表单的后台管理系统模板
3YAdmin基于React+Antd构建.GitHub搜索React+Antd+Admin出来的结果没有上百也有几十个,为什么还要写这个东西呢? 一个后台管理系统的核心我认为应该是权限控制,表单以及 ...
- WPF权限控制框架——【4】抛砖引玉
写第一篇"权限控制框架"系列博客是在2021-01-29,在这不到一个月的时间里,收集自己零碎的时间,竟然写出了一个"麻雀虽小,五脏俱全"的权限控制框架:对于一 ...
- django web 自定义通用权限控制
需求:web系统有包含以下5个url,分别对于不同资源: 1.stu/add_stu/ 2.stu/upload_homework/ 3.stu/query_homework/ 4.stu/add_r ...
- 权限控制框架Shiro简单介绍及配置实例
Shiro是什么 http://shiro.apache.org/ Apache Shiro是一个非常易用的Java安全框架,它能提供验证.授权.加密和Session控制.Shiro非常轻量级,而且A ...
- 权限控制框架Spring Security 和Shiro 的总结
关于权限控制,一开始感觉比较难,后来先是接触了Spring Security 学起来也比较吃力,再是学习了Shiro,感觉简单很多. 总体来说这些框架,主要做了两个事情 Authentication: ...
- django中权限控制到按钮级别
权限控制到按钮级别 : 1.思路 : 由于每个按钮都能认为是一个权限,所以每个按钮都会有一个自己的路径,这些路径都在用户登录时保存在了session ...
- 了解权限控制框架shiro 之实际应用.
Apache Shiro 1.权限控制分为 a.粗粒度 URL 级别权限控制 b.细粒度方法级别权限控制 2.使用shiro进行权限控制主要有四种主要方式 : a. 在程序中 通过 Subje ...
随机推荐
- 【HANA系列】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...
- 位运算符&与、或|、异或^
&按照二进制位进行运算 如:运算规则:0&0=0: 0&1=0:1&0=0:1&1=1:即:两位同时为“1”,结果才为“1”,否则为0[有0则0] 3& ...
- python遍历本地文件系统 按文件大小排序
在这个例子中,主要会用到python内置的和OS模块的几个函数: os.walk() : 该方法用来遍历指定的文件目录,返回一个三元tuple(dirpath, dirnames, filenames ...
- Python实例---模拟微信网页登录(day3)
第四步: 扫码成功后获取最近联系人信息---day3代码 settings.py """ Django settings for weixin project. Gene ...
- 【PAT】B1070 结绳(25 分)
此题太给其他25分的题丢人了,只值15分 注意要求最终结果最长,而且向下取整 #include<stdio.h> #include<algorithm> using names ...
- 如何轻松搞定 笔记本搜不到WIFI信号问题
经常用电脑的同志肯定遇到过:一开机,发现右下角网络图标有个×号,wifi信号也搜不到:或者其他wifi信号能搜到,唯独自家的搜不到,是不是感觉很绝望啊,居然被wifi欺负到身上了,这也太憋屈了吧. 此 ...
- Keil常见错误汇总及处理方式
1. warning: #767-D: conversion from pointer to smaller integer 解释:将指针转换为较小的整数 影响:可能造成的影响:容易引起数据截断,造成 ...
- Java设计模式之十二 ---- 备忘录模式和状态模式
前言 在上一篇中我们学习了行为型模式的策略模式(Strategy Pattern)和模板模式(Template Pattern).本篇则来学习下行为型模式的两个模式,备忘录模式(Memento Pat ...
- jsp 一点点
jsp学习 jsp -处理 作为正常的页面,你的浏览器发送一个http请求道web服务器. web 服务器承认一个JSP页面的HTTP请求,并将其转发给一个JSP引擎. JSP引擎从磁盘加载JSP页面 ...
- swift class的虚函数表、扩展、@objc修饰、虚函数的派发方式研究
swift class的虚函数表.扩展.@objc修饰的研究 工具: swiftc -emit-sil BaseClass.swift | xcrun swift-demangle > Clas ...