1.models下面添加权限控制信息:

class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(u"姓名",max_length=32)
def __str__(self):
return self.name class Meta:
permissions = (('view_customer_list',u'可以查看用户信息'),
('view_customer_info',u'可以查看客户详细信息'),
('edit_own_customer_info',u'可以修改自己的客户信息'),
)

2.配置别名关联的URL:

url(r'^mod_customers/(\d+)/$', views.mod_customers, name='customer_detail'),

3.app下创建权限文件,根据配置的URL修改permissions.py:

from django.core.urlresolvers import resolve
from django.shortcuts import render
perm_dic = { #第一个参数是URL,第二个是请求方法,最后是参数
'view_customer_list': ['customer_list','GET',[]],
# 'view_customer_info': ['customer_detail','GET',[]],
'edit_own_customer_info': ['customer_detail','POST',['test']],
'view_staff_list': ['staff_list','GET',[]],
}

4.前端配置别名url的a标签:

<td style="text-align:center"><a href="{% url 'customer_detail' student.id %}">{{ student.id }}</a></td>

5.permission文件下添加装饰器:

def check_permission(func): #将函数自身func传入
def wrapper(*args,**kwargs): #如果有参数args,kwargs
print("start check permission")
if perm_check(*args,**kwargs) is not True:#没权限
return render(args[0],'no_permission.html')
perm_check(*args,**kwargs) #在执行函数之前,检查是否有权限
return func(*args,**kwargs) #执行被装饰的函数
return wrapper

6.将权限与限制关联,permission文件下:

def perm_check(*args,**kwargs):
request = args[0]
url_resovle_obj = resolve(request.path_info) #resolve将域名解析为URL的别名
current_url_namespace = url_resovle_obj.url_name #获取URL别名
#app_name = url_resovle_obj.app_name #use this name later
print("url namespace:",current_url_namespace)
matched_flag = False # find matched perm item
matched_perm_key = None
if current_url_namespace is not None:#if didn't set the url namespace, permission doesn't work
print("find perm...")
for perm_key in perm_dic:
perm_val = perm_dic[perm_key]
if len(perm_val) == 3:#otherwise invalid perm data format
url_namespace,request_method,request_args = perm_val
print(url_namespace,current_url_namespace)
if url_namespace == current_url_namespace: #matched the url
if request.method == request_method:#matched request method
if not request_args:#if empty , pass
matched_flag = True
matched_perm_key = perm_key
print('mtched...')
break #no need looking for other perms
else:
for request_arg in request_args: #might has many args
request_method_func = getattr(request,request_method) #get or post mostly
#print("----->>>",request_method_func.get(request_arg))
if request_method_func.get(request_arg) is not None:
matched_flag = True # the arg in set in perm item must be provided in request data
else:
matched_flag = False
print("request arg [%s] not matched" % request_arg)
break #no need go further
if matched_flag == True: # means passed permission check ,no need check others
print("--passed permission check--")
matched_perm_key = perm_key
break else:#permission doesn't work
return True if matched_flag == True:
#pass permission check
perm_str = "crm.%s" %(matched_perm_key)
if request.user.has_perm(perm_str):
print("\033[42;1m--------passed permission check----\033[0m")
return True
else:
print("\033[41;1m ----- no permission ----\033[0m")
print(request.user,perm_str)
return False
else:
print("\033[41;1m ----- no matched permission ----\033[0m")

7.在想要权限限制的方法前,添加@check_permission装饰器:

@check_permission
def staff(request):
if request.method == 'POST':
staff_obj = User.objects.all()
return render(request,'staff.html',{'staff_obj':staff_obj})

Django 权限控制配置步骤的更多相关文章

  1. spring基于xml的声明式事务控制配置步骤

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. Django权限控制进阶

    一.一级菜单的排序 我们用字典存放菜单信息,而字典是无序的,当一级菜单过多时可能会出现乱序情况,因此需要给一级菜单排序 1.给一级菜单表的model中加一个weight权重的字段 ,权重越大越靠前 w ...

  3. [Python学习] Django 权限控制

    本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事. 一.主要内容 1.什么是权限管理? 2.Web 权限 3.Django 权限机制 ...

  4. shiro权限控制配置

    shiro配置流程 web.xml中配置shiro的filter spring中配置shiro的过滤器工厂,指定对不同地址权限控制 , 传入安全管理器 配置安全管理器,传入realm,realm中定义 ...

  5. django权限控制

    django 权限机制的实现: http://blog.igevin.info/posts/django-permission/

  6. asp.net权限控制配置web.config

    项目下 有三个文件夹 A,B,C 验正方式是 Forms 验正 我要设置他们的访问权限为, A,匿名可访问 B,普通用户授权后才能访问 C,只允许管理员访问 <configuration> ...

  7. Mac下django简单安装配置步骤

    一.安装软件包并创建项目 $sudo pip install django$sudo python -c "import django;print django.VERSION"( ...

  8. django 权限控制精简版

    视图代码: 视图代码 def index(request): return render(request,'index.html') def login(request): if request.me ...

  9. 阶段3 2.Spring_10.Spring中事务控制_6 spring基于XML的声明式事务控制-配置步骤

    环境搭建 新建工程 把对应的依赖复制过来 src下内容复制 配置spring中的声明事物 找到bean.xml开始配置 配置事物管理器 里面需要注入DataSource 2-配置事物通知 需要先导入事 ...

随机推荐

  1. leetcode mysql

    给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值.交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然).要求只使用一个更新(Update)语句,并且没有 ...

  2. C语言递归之在每个树行中找最大值

    题目描述 您需要在二叉树的每一行中找到最大的值. 示例 输入: / \ / \ \ 输出: [, , ] 题目要求 /** * Definition for a binary tree node. * ...

  3. AnroidStudio gradle版本和android插件的版本依赖

  4. [Kevin英语情报局]那些年我们说过的中式英语

    一. blonde hair 金色头发 grey hair 白头发 baijiu 白酒 white wine 白葡萄酒 I don't think it's right 我认为不正确 I'm chin ...

  5. js中函数总结(1)

    8.1函数定义js的函数可以嵌套在其他函数的定义中,这样它们就可以访问它们被定义时所处的作用域中的任何变量.意味着js函数构成了一个闭包:function name(){} 特殊的:函数表达式有时定义 ...

  6. Hadoop之HDFS介绍

    1. 概述 HDFS是一种分布式文件管理系统. HDFS的使用场景: 适合一次写入,多次读出的场景,且不支持文件的修改: 适合用来做数据分析,并不适合用来做网盘应用: 1.2 优缺点 优点: 高容错性 ...

  7. HTML 全局属性 = HTML5 中添加的属性。

    属性 描述 accesskey 规定激活元素的快捷键. class 规定元素的一个或多个类名(引用样式表中的类). contenteditable 规定元素内容是否可编辑. contextmenu 规 ...

  8. 使用kubeadm进行单master(single master)和高可用(HA)kubernetes集群部署

    kubeadm部署k8s 使用kubeadm进行k8s的部署主要分为以下几个步骤: 环境预装: 主要安装docker.kubeadm等相关工具. 集群部署: 集群部署分为single master(单 ...

  9. 【洛谷】P5348 密码解锁

    [洛谷]P5348 密码解锁 很显然我们可以推导出这个式子 设\(a(m)\)为\(m\)位置的值 \[ \mu(m) = \sum_{m | d} a(d) \\ a(m) = \sum_{m|d} ...

  10. idea npm vue java开发工具安装 环境配置

    感谢此链接内容作者,从前往后流程较完整详细,助我成功配置好(不知道在这之前做的一些尝试有没有影响) https://blog.csdn.net/qq_42564846/article/details/ ...