Как войти в систему и проверить, является ли пользователь сотрудником, может ли он получить доступ к URL или использовать класс представлений? - PullRequest
0 голосов
/ 23 октября 2019

На мой вопрос, моя проблема в том, как войти в систему и проверить, является ли пользователь сотрудником, может ли он получить доступ к URL или использовать класс представлений?

Я хочу войти в систему на веб-сайте (не в консоли администратора)) и пользователь является сотрудником (в консоли администратора) может публиковать сообщения.

А кто-то просто создает учетную запись в Интернете (у них нет разрешения сотрудников), которые просто могут войти.

Спасибо вам большоемного!

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title','content']
    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

Ответы [ 3 ]

1 голос
/ 23 октября 2019

Если вы хотите, чтобы доступ к представлению мог получить только пользователь, то вы можете использовать UserPassesTestMixin и LoginRequiredMixin следующим образом:

class StaffRequiredMixin(LoginRequiredMixin, UserPassesTestMixin):

    def test_func(self):
        return self.request.user.is_staff

Теперь в вашем PostCreateViewВы можете реализовать так:

class PostCreateView(StaffRequiredMixin, CreateView):
     ......
1 голос
/ 23 октября 2019

Создайте файл с именем: permissions.py

И тогда вы можете сделать что-то вроде ниже:

from rest_framework.permissions import BasePermission


class PermissionMixin:
    '''
        Initializes user permissions
    '''
    def __init__(self):
        self._actions = ()
        self._user = False
        self._admin = False

    def _initialize_permissions(self, request):
        self._actions = settings.ALLOWED_ACTIONS
        self._user = request.user and request.user.is_active
        self._admin = self._user and request.user.is_superuser


class AdminsOnlyPermission(BasePermission, PermissionMixin):
    '''
        Determines operations that can be performed by admins only
    '''
    def has_permission(self, request, view):
        self._initialize_permissions(request)

        if view.action in self._actions:
            return self._admin
        else:
            return False
0 голосов
/ 23 октября 2019

Вы можете использовать user.is_stuff, чтобы проверить это.

Ссылка: https://docs.djangoproject.com/en/2.2/ref/contrib/auth/#django.contrib.auth.models.User.is_staff

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...