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 ...
随机推荐
- 03-openldap服务端安装配置
openldap服务端安装配置 阅读目录 基础环境准备 安装openldap服务端 初始化openldap配置 启动OpenLDAP 重新生成配置文件信息 规划OpenLDAP目录树组织架构 使用GU ...
- 团队Alpha博客链接目录
Dipper团队Alpha博客链接目录 团队Alpha冲刺博客 第一次冲刺 第二次冲刺 第三次冲刺 第四次冲刺 第五次冲刺 第六次冲刺 第七次冲刺 第八次冲刺 第九次冲刺 第十次冲刺 第十一次冲刺 第 ...
- Skip-Gram模型
Stanford CS224n的课程资料关于word2vec的推荐阅读里包含Word2Vec Tutorial - The Skip-Gram Model 这篇文章.这里针对此文章作一个整理. wor ...
- python3的C3算法
一.基本概念 1. mro序列 MRO是一个有序列表L,在类被创建时就计算出来. 通用计算公式为: mro(Child(Base1,Base2)) = [ Child ] + merge( mro(B ...
- centos iftop iotop htop
centos6.4安装iftopyum install gccyum -y install libpcap libpcap-develyum -y install ncurses ncurses-de ...
- 【BZOJ3529】数表
数表 Description 有一张 n*m 的数表,其第i行第j列(1<=i<=n,1<=j<=m)的数值为能同时整除 i和j的所有自然数之和.给定a,计算数表中不大于a的数 ...
- django生命周期和事件委派
这是事件委派如果不用事件委派 直接绑定的话,新添加的按钮不会有删除或者编辑的功能 上面是事件委派的代码 新添加的编辑按钮可以弹出123 django生命周期: 这是Django的生命周期 首先会通 ...
- 1407: [Noi2002]Savage
其实答案远不到1e6 所以可以枚举! 设答案是m 那\(i,j\)的相遇就可以表示成\(P_ix+C_i=P_jx+C_j+ym\) 移向就是\((P_i-P_j)x-ym=C_j-C_i\) 套扩展 ...
- curl实例-通过新浪股票接口获取股票信息
在学习curl的过程中,我们知道curl是相当于一个简单的浏览器,通过往对应的服务上面发送数据信息,返回服务器的响应结果,这个在Java里面主要是使用封装好的httpclient来进行操作,但是自己认 ...
- YOLO2(1)配置安装win10+openvc2413+VS2013 简单测试官例
参考官网 https://github.com/AlexeyAB/darknet#how-to-compile-on-windows https://github.com/AlexeyAB/darkn ...