Задать вопрос
JawsIk
@JawsIk
Python Django, Lua, ЧПУ-станки(ArtCam, Aspire)

Как в Django определять админа, персонал, какую-то роль (которую определили в админке), как назначать свежезареганному пользователю роль?

Сразу прошу не ругаться и не кидать ссылки на https://docs.djangoproject.com/en/2.1/ref/contrib/auth/, ибо там не даются примеры простых действий, которые мне нужны и я не могу понять, что сделать чтобы получить результат.

Итак у меня есть пользователи:
  • admin - он же суперпользователь
  • personal - просто зарегистрированный пользователь с поставленной галочкой в админке напротив персонала.
  • manager - поставлена галочка персонала и добавлена роль manage (в которой разрешения на проверку заказов)
  • first, second, test, test2 ... - толпа пользователей, которым никакие права и роли не назначены (ибо я не знаю как это делать), но которые зарегистрированы не в админке, а в интернет-магазине при оформлении заказов и каждый из них может логиниться и каждый может заходить в свой ЛК


Да и вообще все перечисленные выше пользователи могут логиниться, оформлять заказы и заходить в свой ЛК.

Изначально планировалось создать серию админок-кабинетов под каждую роль. Но я с этим не могу разобраться уже неделю. Казалось бы простая вещь, но нигде в документации Django и в примерах на ютубе, даже англоязычном, я не могу найти простую вещь. (да, английский я не знаю и пользуюсь лишь гугл-переводчиком).

Что собственно мне нужно? А нужно в фале views.py простую вещь:

# если авторизован, то
    if request.user.is_authenticated:
         if это_суперпользователь:
                # загружаем админку-кабинет суперпользователя (тот который я сам сделал)
                # ...
          elif это_персонал без ролей:
                # загружаем админку-кабинет персонала (другой, но тот который я сам сделал) без каких-либо спец.разрешений
                # ...
          elif это_персонал с ролью manage:
                # загружаем админку-кабинет менеджера (другой, но тот который я сам сделал)
                # ...
          else: 
                # загружаем админку-кабинет простых пользователей (другой, но тот который я сам сделал)
                # ...  кстати это (надеюсь просто через подготовку данных и 
                # return HttpResponseRedirect(reverse('account'))   
                #  и объяснять мне не надо. Мне нужны именно что писать в If-ах?


Ну почему вот в такой простой доступной и понятной форме нельзя это написать в документации? Ребята ну помогите пожалуйста. Устал уже читать и смотреть кучу несвязанных отрывков.

И если не сложно, скажите что добавить в registration_view, чтобы назначить свежерегистрирующемуся определённую роль. Сейчас там так:
def registration_view(request):
    form = RegistrationForm(request.POST or None)

    if form.is_valid():
        new_user = form.save(commit=False)
        new_user.username = form.cleaned_data['username']
        new_user.set_password(form.cleaned_data['password']) 
        new_user.email = form.cleaned_data['email']
        new_user.first_name = form.cleaned_data['first_name']
        new_user.last_name = form.cleaned_data['last_name']
        new_user.save()

        login_user = authenticate(request, username=form.cleaned_data['username'], password=form.cleaned_data['password'])

        if login_user:
            login(request, login_user)
            return HttpResponseRedirect(reverse('account'))


    context = {
        'form': form,
    }
    return render(request, 'registration.html', context)
  • Вопрос задан
  • 11520 просмотров
Подписаться 4 Простой 1 комментарий
Ответ пользователя Konstantin Malyarov К ответам на вопрос (3)
Konstantin18ko
@Konstantin18ko
Стоматолог
Короче, django по default создаёт ещё таблицы permissions и groups.
Так же есть таблицы user_permissions, user_groups.
Ищите как их можно настроить.

get_group_permissions(obj=None)¶
Возвращает множество строк представляющие права пользователя добавленные с помощью групп.

Добавлено в Django 1.2.
Если указан obj, возвращает права только для указанного объекта.

get_all_permissions(obj=None)
Возвращает множество строк представляющие все права пользователя, с учетом групп.

Добавлено в Django 1.2.
Если указан obj, возвращает права только для указанного объекта.

request.user.get_all_permissions вроде так
Ответ написан
Комментировать