在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通用权限控制框架的更多相关文章

  1. vue-quasar-admin 一个包含通用权限控制的后台管理系统

    vue-quasar-admin   Quasar-Framework 是一款基于vue.js开发的开源的前端框架, 它能帮助web开发者快速创建以下网站:响应式网站,渐进式应用,手机应用(通过Cor ...

  2. Flex-Security权限控制框架

    转自:http://code.google.com/p/flex-security/ flex UI组件权限控制框架 一.快速开始 1) 下载并添加flex_security.swf在你的flex l ...

  3. 3YAdmin-专注通用权限控制与表单的后台管理系统模板

    3YAdmin基于React+Antd构建.GitHub搜索React+Antd+Admin出来的结果没有上百也有几十个,为什么还要写这个东西呢? 一个后台管理系统的核心我认为应该是权限控制,表单以及 ...

  4. WPF权限控制框架——【4】抛砖引玉

    写第一篇"权限控制框架"系列博客是在2021-01-29,在这不到一个月的时间里,收集自己零碎的时间,竟然写出了一个"麻雀虽小,五脏俱全"的权限控制框架:对于一 ...

  5. django web 自定义通用权限控制

    需求:web系统有包含以下5个url,分别对于不同资源: 1.stu/add_stu/ 2.stu/upload_homework/ 3.stu/query_homework/ 4.stu/add_r ...

  6. 权限控制框架Shiro简单介绍及配置实例

    Shiro是什么 http://shiro.apache.org/ Apache Shiro是一个非常易用的Java安全框架,它能提供验证.授权.加密和Session控制.Shiro非常轻量级,而且A ...

  7. 权限控制框架Spring Security 和Shiro 的总结

    关于权限控制,一开始感觉比较难,后来先是接触了Spring Security 学起来也比较吃力,再是学习了Shiro,感觉简单很多. 总体来说这些框架,主要做了两个事情 Authentication: ...

  8. django中权限控制到按钮级别

    权限控制到按钮级别 :          1.思路 :                  由于每个按钮都能认为是一个权限,所以每个按钮都会有一个自己的路径,这些路径都在用户登录时保存在了session ...

  9. 了解权限控制框架shiro 之实际应用.

    Apache Shiro 1.权限控制分为 a.粗粒度 URL 级别权限控制     b.细粒度方法级别权限控制 2.使用shiro进行权限控制主要有四种主要方式 : a. 在程序中 通过 Subje ...

随机推荐

  1. [20180124]奇怪的SQL*Net message from dblink.txt

    [20180124]奇怪的SQL*Net message from dblink.txt --//生产系统出现大量的SQL*Net message from dblink事件,自己分析看看. 1.环境 ...

  2. 06-OpenLDAP密码策略

    阅读视图 openldap密码策略 OpenLDAP服务端定制密码策略 客户端策划策略实例 定义用户第一次登录就修改密码 问题排查手册 重点推荐官方文档 备注:本文依然承接系列文. 1. openld ...

  3. MVC model验证 获取验证错误信息

    public static class ModelStateExtensions { /// <summary> /// 获取model验证错误信息 /// </summary> ...

  4. JavaWeb后台购物车类的具体实现

    相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车: 就像我们平时去超市买东西一样,会推着购物车去买东西: 那么我们接下来看看jav ...

  5. ELK-elasticsearch-6.3.2部署

    参考博客:linux下ElasticSearch.6.2.2集群安装与head.Kibana.X-Pack..插件的配置安装 参考博客:ELK5.5.1 插件安装实践纪要(head/bigdesk/k ...

  6. javascript闭包—围观大神如何解释闭包

    闭包的概念已经出来很长时间了,网上资源一大把,本着拿来主意的方法来看看. 这一篇文章 学习Javascript闭包(Closure) 是大神阮一峰的博文,作者循序渐进,讲的很透彻.下面一一剖析. 1. ...

  7. EBS-新增和更新价目表行

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/gh320/article/details/36666133  新增和更新价目表行 --目的:在已 ...

  8. [NOI2003],[AHOI2006]文本编辑器

    嘟嘟嘟 [NOI2003]的其实就是一个板子--所以我就不说啥了. 唯一需要注意的是读入字符(哎--):题中说"中间可能有空格,请忽略"的意思是要在程序里特判掉,不是不管他-- 输 ...

  9. MP实战系列(三)之实体类讲解

    首先说一句,mybatis plus实在太好用了! mybaits plus的实体类: 以我博客的用户类作为讲解 package com.blog.entity; import com.baomido ...

  10. Hibernate validator使用和自定义validator及整合Spring MVC

    http://blog.csdn.net/lwphk/article/details/43983669 Hibernate validator使用 导入validation-api-xxx.jar 以 ...