django @login_required डेकोरेटर एक सुपरयुसर के लिए


86

क्या django में @login_required के समान एक डेकोरेटर है जो यह भी परीक्षण करता है कि क्या उपयोगकर्ता सुपरयुसर है?

धन्यवाद

जवाबों:


151

user_passes_testडेकोरेटर का उपयोग करें :

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def my_view(request):
    ...

1
सीबीवी में मैं कैसे कर सकता हूं?


यह सुनिश्चित करने के लिए कि उपयोगकर्ता एक सक्रिय उपयोगकर्ता है, आप @staff_member_requiredइसके अतिरिक्त उपयोग कर सकते हैं @user_passes_test
phy25

75

मामले में स्टाफ की सदस्यता पर्याप्त है और आपको यह जांचने की आवश्यकता नहीं है कि उपयोगकर्ता सुपरसुसर है, आप @staff_member_requiredडेकोरेटर का उपयोग कर सकते हैं :

from django.contrib.admin.views.decorators import staff_member_required

@staff_member_required
def my_view(request):
    ...

34
जब मैं यहां आया तो यही वह चीज थी जिसकी मुझे तलाश थी, इसलिए मैंने इसे यहां रखा, और मैं इसे यहां छोड़ दूंगा क्योंकि मुझे लगता है कि यह किसी और के लिए उपयोगी हो सकता है।
2068 पर Bit68

3
यह @ Bit68 है। मैं इसे खोज रहा हूँ :)
शिव शंकर

7

यदि आप @staff_member_required के समान कार्यक्षमता चाहते हैं, तो आप आसानी से अपना डेकोरेटर लिख सकते हैं। एक उदाहरण के रूप में @staff_member लेते हुए हम कुछ ऐसा कर सकते हैं:

from django.contrib.auth import REDIRECT_FIELD_NAME
from django.contrib.admin.views.decorators import user_passes_test

def superuser_required(view_func=None, redirect_field_name=REDIRECT_FIELD_NAME,
                   login_url='account_login_url'):
    """
    Decorator for views that checks that the user is logged in and is a
    superuser, redirecting to the login page if necessary.
    """
    actual_decorator = user_passes_test(
        lambda u: u.is_active and u.is_superuser,
        login_url=login_url,
        redirect_field_name=redirect_field_name
    )
    if view_func:
        return actual_decorator(view_func)
    return actual_decorator

यह उदाहरण एक संशोधित staff_member_required है, बस एक चेक को लैम्ब्डा में बदला है।


4
आप यह आयात विवरण भी चाहते हैं :) from django.contrib.auth import REDIRECT_FIELD_NAME
ब्रायन टार्पी

3

वर्ग आधारित विचारों के लिए, एक पुन: प्रयोज्य डेकोरेटर बनाना:

from django.contrib.auth.mixins import UserPassesTestMixin
from django.views.generic import View


def superuser_required():
    def wrapper(wrapped):
        class WrappedClass(UserPassesTestMixin, wrapped):
            def test_func(self):
                return self.request.user.is_superuser

        return WrappedClass
    return wrapper

@superuser_required()
class MyClassBasedView(View):
    def get(self, request):
        # ...

2

यदि आपके पास उपयोगकर्ता की आपकी प्रोफ़ाइल है तो आप बस ऐसा कर सकते हैं

@login_required
@user_passes_test(lambda u: True if u.profile.role==2 else False )
def add_listing(request):
    #...

1

मैं मिश्रणों का उपयोग करने की सलाह देता हूं, उदाहरण:

from django.contrib.auth.mixins import UserPassesTestMixin


class SuperUserCheck(UserPassesTestMixin, View):
    def test_func(self):
        return self.request.user.is_superuser

तो फिर तुम में जोड़ सकते हैं SuperUserCheckकरने के लिए Viewवर्ग:

class MyView(SuperUserCheck, View):

0

नया कोड लिखे बिना वर्ग आधारित दृश्य पर एक सुपरयूजर की आवश्यकता के लिए:

from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import user_passes_test

@method_decorator(user_passes_test(lambda u: u.is_superuser), name='dispatch')
class AdminCreateUserView(LoginRequiredMixin, FormView):
    ...
    ...
    ...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.