django 添加权限

a.models中随意增加 meta类class School(models.Model):    name=models.CharField(max_length=32,unique=True)    city=models.CharField(max_length=32)    addr=models.CharField(max_length=32)    def __str__(self):        return self.name    class Meta:        permissions=((‘can_see_schoolsDetail‘,U‘查看学校的详细信息‘),)

b.新建一个promission.py
from django.core.urlresolvers import resolvefrom django.shortcuts import render,redirect

# 第一个参数是权限名称  permissions=((‘can_see_schoolsDetail‘,U‘查看学校的详细信息‘),)# 第二个参数是urls的别称  url(r‘^schoolsDetail/(\d+)‘,views.schoolsDetail,name=‘school_detail‘),# 第三个参数是请求方法及其请求方法perm_dic = {    # ‘can_see_schoolsDetail‘: [‘school_detail‘,‘POST‘,[]],    ‘can_see_schoolsDetail‘: [‘school_detail‘,‘GET‘,[]],    ‘view_customer_info‘: [‘customer_detail‘,‘GET‘,[]],    ‘edit_own_customer_info‘: [‘customer_detail‘,‘POST‘,[‘qq‘,‘name‘]], }

def perm_check(*args,**kwargs):    request = args[0]    url_resovle_obj = resolve(request.path_info)    current_url_namespace = url_resovle_obj.url_name    #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 = "app1.%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")def check_permission(func):

def wrapper(*args,**kwargs):        print("---start check perms",args[0])        if not perm_check(*args,**kwargs):            return render(args[0],‘403.html‘)        return func(*args,**kwargs)        #print("---done check perms")    return wrapper
时间: 2024-10-02 02:59:42

django 添加权限的相关文章

django的权限组件

个人思路设计,没啥太多经验,轻喷 权限的作用: 不同用户,根据不同的权限,显示不同的页面内容. # 由于用户的权限路径可能重复,所以通过角色对应路径,可以重用,只需要用户指定角色,角色对应路径,就可以很方便(只要限制角色的权限即可,用户指定不同的角色,达到权限重用) 权限要关注的几个点: (1) 权限注入 在登陆成功的时候注入权限,该测试项目,我按照我中间件认证.动态菜单.模板认证权限需要内容做的权限注入. # 权限注入的目的是后续更轻松的操作,也可以不注入权限,通过登陆成功的id去看权限也可以

167.权限-添加权限的两种方式

Django中内置了权限功能,他的权限都是针对表与模型级别的,比如对某个模型上的数据是否可以进行增删改查操作,它不能针对数据级别,比如针对某个表的某条数据进行增删改查操作如果要实现数据级别的,考虑使用django.guardian. 1.通过定义模型的方式添加权限 (1)权限都是django.contrib.auth.Permission的实例.这个模型包含三个字段:name.codename.content_type,其中的content_type表示这个permission是属于哪个app下

在manifest中添加权限和在untiy中android的sd卡的根目录

安卓sd卡根路径为"/mnt/sdcard/"; 添加权限

sharepoint给文档库每个数据条添加权限

前言 老大任务,做一个读取文档库把里面的每一条数据添加权限.挺起来很简单,但是做起来,还是很简单,哈哈.因为我没有接触过这些代码,所以得不断的请教了.大题明白了,简单实现了一下,应用控制台先做了一下简单的功能,里面有写死的,但是完全可以写活. 代码部分 //读取网站集 SPSite site = new SPSite ("http://localhost"); SPWebApplication webApp = site.WebApplication; SPWeb web = site

Django -> 添加ModelAdmin.date_hierarchy

第一次使用ModelAdmin.date_query,在admin.py中添加后,出现了这样的错误 ImproperlyConfigured exception (pytz isn't installed) 使用以下命令安装pytz之后,问题依然没有解决 $sudo pip install pytz 根据搜索结果,原来需要把settings.p中的USE_TZ = True修改为USE_TZ = False USE_TZ标记了是否支持Time zone.它的作用是可以根据用户的时区来处理日期.

C#给文件夹添加权限

//==== //添加权限 private void SetAttributes(string folder) { if (folder == "" || !Directory.Exists(folder)) { return; } DirectoryInfo folderInfo = new DirectoryInfo(folder); //添加当前用户权限 string curUser = Environment.UserDomainName.ToString() + "

2.4.3、Django用户权限控制

上面已经实现了登录和注销功能,但是还没起作用. 我们需要在每个视图函数里加上限制@login_required 如下: from django.contrib.auth.decorators import login_required ... ... @login_required def data_daka(request): all = class.objects.all() ... ... login_required实现了如下功能: 如果用户没有登录, 重定向到/accounts/log

[Django]添加robots.txt

方法一 : 可以直接在程序中添加url映射 在最外层的urls.py中添加 1 2 3 4 5 urlpatterns = patterns('',       ......      (r'^robots\.txt$', lambda r: HttpResponse("User-agent: *\nDisallow: /", mimetype="text/plain")),      (r'^CCSN\.txt$', lambda r: HttpResponse(

为Kubernetes dashboard访问用户添加权限控制

为Kubernetes dashboard访问用户添加权限控制 [TOC] 1. 需求 在开发环境给开发人员创建应用部署管理权限,可以使用dashboard的token和kubeconfig文件登录,并在开发人员机器上安装kubectl命令,可以使用kubectl port-forward命令. 2. 方案 因为我们用到了dashboard和kubeapps,所以他们的rbac权限都要分配. 创建namespace:dev 创建ServiceAccount:dev-user1 给相应权限,并绑定