欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Django權(quán)限控制初探-創(chuàng)新互聯(lián)

通過(guò)django默認(rèn)的權(quán)限管理來(lái)管理權(quán)限即可,我們?cè)诨A(chǔ)上進(jìn)行一些第三方擴(kuò)展

成都創(chuàng)新互聯(lián)10年專(zhuān)注成都高端網(wǎng)站建設(shè)定制網(wǎng)站設(shè)計(jì)服務(wù),為客戶(hù)提供專(zhuān)業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開(kāi)發(fā),軟件開(kāi)發(fā),網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣,網(wǎng)絡(luò)運(yùn)營(yíng)服務(wù)及企業(yè)形象設(shè)計(jì);成都創(chuàng)新互聯(lián)擁有眾多專(zhuān)業(yè)的高端網(wǎng)站制作開(kāi)發(fā)團(tuán)隊(duì),資深的高端網(wǎng)頁(yè)設(shè)計(jì)團(tuán)隊(duì)及經(jīng)驗(yàn)豐富的架構(gòu)師高端網(wǎng)站策劃團(tuán)隊(duì);我們始終堅(jiān)持從客戶(hù)的角度出發(fā),為客戶(hù)量身訂造網(wǎng)絡(luò)營(yíng)銷(xiāo)方案,解決網(wǎng)絡(luò)營(yíng)銷(xiāo)疑問(wèn)。

下面給出一個(gè)權(quán)限控制的示例,這里url路徑轉(zhuǎn)發(fā)的時(shí)候需要添加默認(rèn)的 別名,我們需要修改的也是這些別名

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User) 
    name = models.CharField(max_length=64)
    school = models.ForeignKey('School')

    def __unicode__(self):
        return self.name
    class Meta:
        permissions =(('view_customer_list', u"可以查看客戶(hù)列表"),
                      ('view_customer_info',u"可以查看客戶(hù)詳情"),
                      ('edit_own_customer_info',u"可以修改自己的客戶(hù)信息"),
                      ('view_teacher_list',u"可以查看老師列表"),
                      ('view_school_list',u"可以查看學(xué)校列表"),
                      )

permissions.py 這邊采取的是裝飾的寫(xiě)法

# -*- coding:utf-8 -*-
# Author:Alex Li
from django.core.urlresolvers import resolve
from django.shortcuts import render
perm_dic = {
    'view_customer_list': ['customer_list','GET',[]],
    'view_customer_info': ['customer_detail','GET',[]],
    ''''''
    '''后端參數(shù)'''
    'edit_own_customer_info': ['customer_detail','POST',[]],
}

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
        '''這邊如果 沒(méi)有定義url別名的話(huà),那么為了避免影響全局,就讓它默認(rèn)就有權(quán)限'''
        return True

    if matched_flag == True:
        #pass permission check
        perm_str = "crm.%s" %(matched_perm_key) #crm.view_customer_list
        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")
        '''所有的為空的情況,也沒(méi)有放過(guò)'''
        return False

def check_permission(func):
    def wrapper(*args,**kwargs):
        print('---start check perm---')
        if perm_check(*args,**kwargs) is not True:#no permisssion
            return render(args[0],'crm/403.html')
        return func(*args,**kwargs)
    return  wrapper

views.py

'''這塊也在前端做了下權(quán)限劃分的顯示,成功了'''
@login_required
@check_permission
def teachers(req):
    teachers_list=models.UserProfile.objects.all()
    return  render(req,'crm/teachers.html',{'teachers_list':teachers_list})

◆ 權(quán)限驗(yàn)證(1) 

views 中驗(yàn)證 

if not request.user.has_perm('crm.view_teachers_list') 
return HttpResponse('Forbidden')



◆ 權(quán)限驗(yàn)證(2) 

Template 中的權(quán)限檢查 

{% if perms.crm.view_teachers_list %} 
有權(quán)限 
{% endif %}

前端權(quán)限判斷截圖如下:

Django 權(quán)限控制初探

創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。

網(wǎng)頁(yè)名稱(chēng):Django權(quán)限控制初探-創(chuàng)新互聯(lián)
分享鏈接:http://chinadenli.net/article24/dghoje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站用戶(hù)體驗(yàn)、全網(wǎng)營(yíng)銷(xiāo)推廣軟件開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)公司、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站