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 ...
随机推荐
- JDBC-Statement,prepareStatement,CallableStatement的比较
参考:https://www.cnblogs.com/Lxiaojiang/p/6708570.html JDBC核心API提供了三种向数据库发送SQL语句的类: Statement:使用create ...
- sysbench对MySQL的压测,使用sysbench压测磁盘io
QPS - query per secondTPS - transaction per second 不是特别关注,每个业务场景中事务标准是不一样的 Ⅰ.sysbench测试框架 Ⅱ.常用测试脚本 [ ...
- ARM有几条memory barrier 的指令?分别有什么区别?
从ARMv7指令集开始,ARM提供3条内存屏障指令. (1)数据存储屏障( Data Memory Barrier,DMB) 数据存储器隔离.DMB指令保证:仅当所有在它前面的存储器访问操作都执行完毕 ...
- python基本数据类型 数字 和 字符串
一.数字 int type可以查看数据类型 将字符串转换为数字: a=" b=int(a) print(type(a)) 以十六进制或者八进制或者二进制的形式转换为十进制: num ...
- tkinter学习系列(四)之Button 控件
目录 目录 前言 (一)基本用法和可选属性 ==1.基本用法== ==2.可选属性== (二)属性的具体实现和案例 ==1.常用属性== ==案例一== ==2.按钮里的图片== ==案例二== == ...
- Windows端部署zabbix-agent
一.windows客户端的配置关闭windows防火墙或者开通10050和10051端口(1).关闭防火墙(不推荐直接关闭,测试可以这样做,尤其是最近勒索病毒猛烈)开始—控制面板—windows防火墙 ...
- Linux 小知识翻译 - 「版本号」的命名方式
包括OS,所有的软件都有版本号信息.一般来说,版本号的增大表示软件的功能增强了或者修正了一些Bug,也就是表示软件更新了. 版本号的命名方式没有统一的标准.每种软件都不一样. 大部分情况下,版本号以「 ...
- Lua 基础之Weak Table(5)
Lua垃圾收集策略 Lua自动进行内存的管理.程序只能创建对象,而没有执行删除对象的函数.通过使用垃圾收集技术,Lua会自动删除那些失效的对象,也就是引用为0 的对象.但是呢?有些对象,引用没有指向它 ...
- 计算机基础-Ghost克隆
Ghost硬盘克隆 1.主要功能 (1)创建硬盘镜像备份文件 (2)将备份恢复到原硬盘上 (3)磁盘备份可以在各种不同的存储系统间进行 (4)可以将备份复制到别的硬盘上 (5)在复制过程中自动分区并格 ...
- 【BZOJ4310】跳蚤
[BZOJ4310]跳蚤 Description 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究. 首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他 ...