簡體   English   中英

Django上下文處理器來檢查用戶權限

[英]Django context processor to check user permissions

我想編寫一個上下文處理器,它將查找現有上下文,如果存在表單,請檢查用戶是否有權編輯該對象。 如果沒有,我將覆蓋該上下文變量。

如何從上下文處理器內部讀取現有上下文?

編輯:使用這種類型的上下文處理器的原因是為了避免在每個視圖中都具有if語句的檢查權限。 在對象級別,某些用戶將具有讀/寫訪問權限,其他用戶將具有只讀訪問權限,而其他用戶將無訪問權限。 在處理完視圖后,我想據此操作表單。

為什么不只使用user_passes_test裝飾器包裝視圖? 您可以在那里進行所需的任何檢查-無需黑客。

您應該使用django-authority任何授權包 雖然,我不能保證他們自己不依賴黑客,但是至少您不會一個人使用黑客。 也就是說,這是您的問題的有效解決方案:

  1. 猴子補丁django.template.base.RequestContext ,用於設置request.context = self。

  2. 創建一個模板上下文處理器 ,可以使用request.context

  3. 將上下文處理器添加到設置中 ,您就可以開始了

這是一個示例,您可以將其粘貼到settings.py中,它可以正常工作:

def print_context(request):
    print request.context.get('form', 'No form in this context')
    return {}

from django.template.base import RequestContext
orig_init = RequestContext.__init__
def new_init(self, request, **kwargs):                                           
    request.context = self
    orig_init(self, request, **kwargs)                                           
RequestContext.__init__ = new_init

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.auth',                                       
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',                                       
    'django.core.context_processors.media',
    'django.core.context_processors.request',
    'settings.print_context',
)

請注意,您正在反對Django的設計 ,我在假設您知道自己在做什么的前提下發布了此答案-您對Python和Django都非常了解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM