Django - Как я могу настроить разрешение страницы в соответствии с ролью участника? - PullRequest
0 голосов
/ 19 января 2020

Я использую django -groups-manager.

Снимок экрана

Я могу установить разрешение страницы в соответствии с пользователем в группе в декораторе ниже. Так, как я могу настроить это для роли участника? Таким образом, только участник с этой ролью может видеть страницу. Я жду вашей помощи.

decorators.py

def sahip_only(view_func):
    def wrapper_function(request, *args, **kwargs):
        group = None
        if request.user.groups.exists():
            group = request.member.groups.all()[0].name
        if group == 'PC':
            return redirect('home')
        if group == 'Console':
            return view_func(request, *args, **kwargs)
        else:
            return HttpResponse('You are not authorized to access this page.')
    return wrapper_function

views.py

@login_required(login_url='/accounts/login/')
@sahip_only
def calisan(request):
    queryset = request.user.groups
    form = CalisanForm(request.POST or None, group_qs=queryset)
    if form.is_valid():
        user = form.save()
        group = form.cleaned_data['group']
        user.groups.add(AGroup.objects.get(name=group))
        username = form.cleaned_data['username']
        member = Member.objects.create(first_name=username)
        group = Group.objects.get(name=form.cleaned_data['group'])
        group.add_member(member, [form.cleaned_data.get('roles')])
        user.save()
        password = form.cleaned_data.get('password1')
        new_user = authenticate(username=user.username, password=password)
        return redirect('home')
    return render(request, 'accounts/calisan/calisan.html', {'form': form, 'title': 'Üye Ol'})

forms.py

class CalisanForm(UserCreationForm):
    username = forms.CharField(max_length=100, label='Kullanıcı Adı')
    email = forms.EmailField(max_length=200, help_text='Required')
    password1 = forms.CharField(max_length=100, label='Parola', widget=forms.PasswordInput)
    password2 = forms.CharField(max_length=100, label='Parola Doğrulama', widget=forms.PasswordInput)
    group = forms.ModelChoiceField(queryset=Group.objects.all(), widget=forms.widgets.RadioSelect(), empty_label=None)
    roles = forms.ModelChoiceField(queryset=GroupMemberRole.objects.all(), widget=forms.widgets.RadioSelect(), empty_label=None)

    def __init__(self, *args, **kwargs):
        qs = kwargs.pop("group_qs")
        super().__init__(*args, **kwargs)
        self.fields["group"].queryset = qs

    class Meta:
        model = User
        fields = [
            'username',
            'email',
            'password1',
            'password2',
            'group',
            'roles',
        ]

    def clean_password2(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError("Parolalar eşleşmiyor!")
        return password2

    def clean_email(self):
        email = self.cleaned_data.get('email')
        lenghtw = len(User.objects.filter(email=email))
        if lenghtw > 0 :
            raise forms.ValidationError('Bu email adresine sahip bir kullanıcı zaten var.')
        return email
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...