জাজানো @ লগিন_ একটি সুপারভাইজারের জন্য প্রয়োজনীয় সাজসজ্জার জন্য


90

@ লগিন_প্রযুক্তের মতো জ্যাঙ্গোতে কি কোনও সজ্জা আছে যা পরীক্ষা করে যদি ব্যবহারকারী সুপারউজার হয়?

ধন্যবাদ

উত্তর:


155

user_passes_testসাজসজ্জার ব্যবহার করুন :

from django.contrib.auth.decorators import user_passes_test

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

4
আমি কীভাবে সিবিভিতে এটি করতে পারি?


ব্যবহারকারী সক্রিয় ব্যবহারকারী তা নিশ্চিত করার জন্য, আপনি @staff_member_requiredছাড়াও ব্যবহার করতে পারেন @user_passes_test
phy25

76

যদি কর্মীদের সদস্যপদ যথেষ্ট হয় এবং আপনি কি না আপনি ব্যবহার করতে পারেন, তবে ব্যবহারকারী একটি সুপার-ইউজার কিনা চেক করতে হবে @staff_member_requiredপ্রসাধক:

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

@staff_member_required
def my_view(request):
    ...

34
আমি যখন এখানে এসেছি এটিই আমি যা খুঁজছিলাম, সে কারণেই আমি এটি এখানে রেখেছি এবং আমি এটি এখানে রেখে দেব কারণ আমার ধারণা এটি অন্য কারও পক্ষে কার্যকর হতে পারে।
বিট 68

4
এটি @ বিট 68 68 আমি এটি সন্ধান করছি :)
শিব শঙ্কর

7

আপনি যদি @ স্টাফ_মেম্বার_এর প্রয়োজনীয় অনুরূপ কার্যকারিতা রাখতে চান তবে সহজেই নিজের ডেকরেটার লিখতে পারবেন। @ স্টাফ_মেমারকে উদাহরণ হিসাবে গ্রহণ করা আমরা এরকম কিছু করতে পারি:

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

এই উদাহরণটি হ'ল একটি পরিবর্তিত স্টাফ_সেম্বার_ প্রয়োজনীয়, ল্যাম্বডায় একটি চেক পরিবর্তন করেছেন।


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):
        # ...

3

আমি মিক্সিন ব্যবহার করার পরামর্শ দিচ্ছি, উদাহরণস্বরূপ:

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):

2

আপনার যদি আপনার ব্যবহারকারীর প্রোফাইল থাকে আপনি কেবল এটি করতে পারেন

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

1

নতুন কোড না লিখে ক্লাস ভিত্তিক ভিউতে সুপারউজারের প্রয়োজন:

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):
    ...
    ...
    ...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.