Как добавить разрешения на редактирование собственного в django admin в зависимости от значения в модели? - PullRequest
0 голосов
/ 09 октября 2019

У меня вопрос по поводу Django-Admin. Каждый элемент в моем администраторе Django имеет поле «EngagementManager», в котором содержится имя человека. Когда вы входите в Django, ваше имя пользователя совпадает с полем, о котором я упоминал ранее.

Мне нужно реализовать функцию, чтобы входящий в систему пользователь мог изменять / редактировать только элементы, когда поле «EngagementManager» будет соответствовать входящему в систему пользователю. Может кто-нибудь, пожалуйста, предоставьте мне кусок кода и небольшое руководство, где его разместить, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Django Admin не предназначен для этой цели

Django Admin следует использовать только тогда, когда пользователь имеет полный доступ ко всему в базе данных. То, что они могут редактировать, может быть ограничено, но в целом то, что они могут видеть, не должно быть.

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

Такое ограничение легко в views и templates. Используйте request.user.

Я сейчас на моем телефоне, но если вы хотите, я могу опубликовать пример кода, который делает это. Просто прокомментируйте ниже.

Это образцы из updateprofile метода, который у меня есть.

Основная идея здесь заключается в том, что единственными данными, отправляемыми в форму, являются данные пользователя учетной записи, которая в данный момент вошла в систему. Вы хотели бы реализовать такую ​​функцию.

views.py проверка правильности пользователя

@login_required(login_url='/login')
def update_profile(request):
    if request.method == 'POST':
        user_form = UserForm(request.POST, instance=request.user)
        if user_form.is_valid():
            user_form.save()
            return redirect('/accounts/{}'.format(request.user.username), request.user.username)
        else:
            print("Something broke")
    else:
        user_form = UserForm(instance=request.user) #grabbing the data from that specific user, making sure that is all that is passed. 
    return render(request, 'profile_update.html', {
        'user_form': user_form,
    })

В шаблоне оператор if проверяет, является ли пользователь страницы владельцем зарегистрированной учетной записи (и проверяет, что онипопадают в их учетную запись) и, если да, показывает им информацию.

шаблон кода для проверки правильности пользователя

    {% if page_username == user.username and user.is_authenticated %}
<p>Whatever content you wanted to show to the user who owned the page and was logged in.</p>

{% else %}
<p>Whatever you want to say to users who are not authorized to view the data on the page, if anything.</p>

{% endif %}
0 голосов
/ 09 октября 2019

Django Admin предназначен только для доверенных администраторов и редакторов контента, а не для обычных пользователей.

Если вам нужно ограничить пользователей только возможностью просматривать их собственный контент, то вы должны создать его самостоятельно.

...