django的自定义权限

最近在写发布系统,涉及到权限的控制

如下

1;定义一张权限控制的表

 1 [[email protected] app01]# tailf -25 models.py
 2
 3
 4
 5 class Permission(models.Model):
 6     name = models.CharField("权限名称", max_length=64)
 7     url = models.CharField(‘URL名称‘, max_length=255)
 8     chioces = ((1, ‘GET‘), (2, ‘POST‘))
 9     per_method = models.SmallIntegerField(‘请求方法‘, choices=chioces, default=1)
10     argument_list = models.CharField(‘参数列表‘, max_length=255, help_text=‘多个参数之间用英文半角逗号隔开‘, blank=True, null=True)
11     describe = models.CharField(‘描述‘, max_length=255)
12
13     def __str__(self):
14         return self.name
15
16     class Meta:
17         verbose_name = ‘权限表‘
18         verbose_name_plural = verbose_name
19         #权限信息,这里定义的权限的名字,后面是描述信息,描述信息是在django admin中显示权限用的
20         permissions = (
21             (‘views_svns_list‘, ‘查看svn版本库信息表‘),
22             (‘views_onlinecode_info‘, ‘查看推送代码详细信息表‘),
23             (‘views_assets_info‘, ‘查看资产详细信息表‘),
24         )

2:定义权限文件

[[email protected] app01]# cat permission.py
#!/usr/bin/env python
#_*_coding:utf-8_*_
from django.shortcuts import render
from app01 import models
from django.db.models import Q
from django.core.urlresolvers import resolve   #此方法可以将url地址转换成url的name

def perm_check(request, *args, **kwargs):
    url_obj = resolve(request.path_info)
    url_name = url_obj.url_name
    perm_name = ‘‘
    #权限必须和urlname配合使得
    if url_name:
        #获取请求方法,和请求参数
        url_method, url_args = request.method, request.GET
        url_args_list = []
        #将各个参数的值用逗号隔开组成字符串,因为数据库中是这样存的
        for i in url_args:
            url_args_list.append(str(url_args[i]))
        url_args_list = ‘,‘.join(url_args_list)
        #操作数据库
        get_perm = models.Permission.objects.filter(Q(url=url_name) and Q(per_method=url_method) and Q(argument_list=url_args_list))
        if get_perm:
            for i in get_perm:
                perm_name = i.name
                perm_str = ‘school.%s‘ % perm_name
                if request.user.has_perm(perm_str):
                    print(‘====》权限已匹配‘)
                    return True
            else:
                print(‘---->权限没有匹配‘)
                return False
        else:
            return False
    else:
        return False   #没有权限设置,默认不放过

def check_permission(fun):    #定义一个装饰器,在views中应用
    def wapper(request, *args, **kwargs):
        if perm_check(request, *args, **kwargs):  #调用上面的权限验证方法
            return fun(request, *args, **kwargs)
        return render(request, ‘403.html‘, locals())
    return wapper

3:定义views.py

from app01.permission import  check_permission

@login_required(login_url=‘/login/‘)
@check_permission
def svnupdate(request,svn_id,u_type):
    pass

20170426
添加权限控制,具体使用方式登录admin,然后在权限表里操作。
权限名称 就是models中定义的权限
URL名称 就是具体访问的某个url 就是在urls.py里的name字段
以上两个字段必须和models中和url中的一致。
添加这个为拒绝的权限,如果普通用户需要访问,需要单独对普通用户授权。
点击admin 的User选项,具体的赋权操作

时间: 2024-10-24 04:52:22

django的自定义权限的相关文章

Django之自定义权限

官方解释 Custom permissions? To create custom permissions for a given model object, use the permissions model Meta attribute. This example Task model creates three custom permissions, i.e., actions users can or cannot do with Task instances, specific to

DRF之自定义权限

1.增加表字段: from django.db import models class UserInfo(models.Model): username = models.CharField(max_length=32) password = models.CharField(max_length=32) email = models.CharField(max_length=64) user_type_choices = ((0,'普通用户'),(1,'管理员')) user_type = m

Django REST framework —— 权限组件源码分析

在上一篇文章中我们已经分析了认证组件源码,我们再来看看权限组件的源码,权限组件相对容易,因为只需要返回True 和False即可 代码 1 class ShoppingCarView(ViewSetMixin, APIView): 2 permission_classes = [MyPermission, ] 3 def list(self,request, *args, **kwargs): 4 """ 5 查看购物车信息 6 :param args: 7 :param k

django自带权限机制

1. Django权限机制概述 权限机制能够约束用户行为,控制页面的显示内容,也能使API更加安全和灵活:用好权限机制,能让系统更加强大和健壮.因此,基于Django的开发,理清Django权限机制是非常必要的. 1.1 Django的权限控制 Django用user, group和permission完成了权限机制,这个权限机制是将属于model的某个permission赋予user或group,可以理解为全局的权限,即如果用户A对数据模型(model)B有可写权限,那么A能修改model B

Django REST framework - 权限和限制

目录 Django REST framework 权限和限制 (你能干什么) 设置权限的方法 案例 第一步: 定义一个权限类 第二步: 使用 视图级别 全局级别设置 --- 限制 (你一分钟能干多少次?)**好像有点污~~ ### 第一步: 自定义限制类 第二步: 使用 嫌麻烦的话,还可以使用内置限制类,哈哈~ Django REST framework 权限和限制 (你能干什么) 与身份验证和限制一起,权限确定是应该授予还是拒绝访问请求. 在允许任何其他代码继续之前,权限检查始终在视图的最开始

DRF认证、自定义认证和权限、自定义权限

源码分析 """ 1)APIView的dispath(self, request, *args, **kwargs) 2)dispath方法内 self.initial(request, *args, **kwargs) 进入三大认证 # 认证组件:校验用户 - 游客.合法用户.非法用户 # 游客:代表校验通过,直接进入下一步校验(权限校验) # 合法用户:代表校验通过,将用户存储在request.user中,再进入下一步校验(权限校验) # 非法用户:代表校验失败,抛出异常

restframework 权限流程 及自定义权限类

一.请求来到之后,都要先执行dispatch方法 def dispatch(self, request, *args, **kwargs): """ `.dispatch()` is pretty much the same as Django's regular dispatch, but with extra hooks for startup, finalize, and exception handling. """ self.args

android 自定义权限

理解android的自定义权限,下面介绍一段代码.包括两个安卓项目,project 2试图调用project 1中的特权活动PrivActivity. android project 1 : application name: Custom Permission pacakage name: com.cust.perm 1) 特权活动 PrivActivity.java package com.cust.perm; import android.app.Activity; import andr

shiro 实现自定义权限规则校验

<span style="font-family: Arial, Helvetica, sans-serif;">在系统中使用shiro进行权限管理,当用户访问没有权限的资源时会跳转到指定的登录url.</span> 但是如果系统中支持手机app,手机访问时没有使用session进行登录凭证管理,而是使用token,有两种解决方法: 1:支持手机客户端访问的资源在权限配置中配置成anon 2:实现自定义认证拦截器,对用户请求资源进行认证 显然第一种方法不适用,这