Создание штатного пользователя и предоставление прав в Django
Я создал пользователя staff из панели администратора для приложения Django, но не назначил никаких разрешений вручную этому пользователю, Когда я вхожу в систему с учетными данными этого пользователя, я получаю все разрешения по умолчанию. Я использую пользовательского пользователя, но не настраивал никаких разрешений.
пожалуйста, помогите мне, где я ошибаюсь и как создать пользователя staff без каких-либо прав по умолчанию.
Простите, прочитав ваш вопрос еще раз, я думаю, что совершенно неправильно вас понял. Я оставлю свой ответ ниже, если это поможет кому-то еще. Когда вы назначаете пользователя как Staff User в интерфейсе администратора, ваш пользователь не должен иметь никаких прав по умолчанию. Вот что я вижу в своем интерфейсе администратора при назначении штатного пользователя:
Есть ли у вас группы, которые уже отображаются в интерфейсе администратора?
Мой первоначальный не относящийся к делу ответ:
Вам необходимо ограничить ваши представления вручную. Если вы используете представления на основе классов (CBVs), вы можете сделать это с помощью миксина (UserPassesTestMixin, например, или LoginRequiredMixin), а если вы используете представления на основе функций (FBVs), вам придется использовать декораторы или написать ограничения внутри функции.
Вот пример использования пользовательского декоратора с помощью FBV:
from functools import wraps
from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404
from django.template.response import TemplateResponse
from .models import YourModelClass
def user_permission_test(function):
"""
Decorator to check if the requesting user is either a superuser
or owns the object
"""
@wraps(function)
def decorator(request, **kwargs):
object = None
pk = kwargs.get("pk", None)
object = get_object_or_404(YourModelClass, pk=pk)
if (not request.user.is_superuser) and (request.user != object.owner):
raise PermissionDenied()
return function(request, **kwargs)
return decorator
@login_required # this decorator makes sure that only logged-in users can access this view
@user_permission_test # this decorator makes sure that either the user is a superuser or owns the object
def detail(request, **kwargs):
"""
Detail view
"""
pk = kwargs.get("pk", None)
object = get_object_or_404(YourModelClass, pk=pk)
context = {"object": object}
return TemplateResponse(
request,
template="yourapp/detail.html",
context=context,
)
Альтернативный вариант - написать тест внутри вашего кода без пользовательского декоратора в этом случае. Я включил пользовательский декоратор выше только для того, чтобы показать вам, как это можно сделать для более сложных разрешений без необходимости писать один и тот же код для нескольких представлений.
from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404
from django.template.response import TemplateResponse
from .models import YourModelClass
@login_required # this decorator makes sure that only logged-in users can access this view
def detail(request, **kwargs):
"""
Detail view
"""
pk = kwargs.get("pk", None)
object = get_object_or_404(YourModelClass, pk=pk)
# here is the test to check the permissions
if (not request.user.is_superuser) and (request.user != object.owner):
raise PermissionDenied()
context = {"object": object}
return TemplateResponse(
request,
template="yourapp/detail.html",
context=context,
)
Для пользователя staff вы можете использовать следующий декоратор:
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def yourview(request, pk):
....