В настоящее время я пишу сайт, который использует django-guardian для назначения разрешений на уровне объекта, которые используются по всему сайту.
Вот требуемая функциональность:
Я бы хотел, чтобы у пользователя были права на редактирование одного объекта (или нескольких объектов).Например, если есть пользователь с именем «Joe» и модель с именем «Partyline», я могу дать «Joe» определенные разрешения на «change_partyline» для 3 конкретных объектов «Partyline».
Когда Джо регистрируетсяв админ-панель Django, я бы хотел, чтобы он мог редактировать ТОЛЬКО 3 своих конкретных объекта "Partyline", так как это единственное, что он имеет право редактировать.
Вот текущийфункциональность:
Я могу назначить Джо полномочия change_partyline для 3 объектов Partyline - нет проблем.И Джо может войти в админку просто отлично.Проблема в том, что, поскольку у Джо нет «глобальных» разрешений на изменение ВСЕХ партилин, в админ-панели говорится, что у него нет никаких разрешений, и он не позволит ему ничего редактировать.Я хотел бы найти способ для администратора признать, что у Джо есть разрешения на редактирование только 3 конкретных объектов, и позволить ему просматривать и редактировать только те объекты, с которыми у него есть разрешения для работы.
Я быЛЮБЛЮ, чтобы найти способ сделать эту работу.Я активно использую администратор для того, чтобы мои пользователи могли прямо сейчас управлять всем, и это действительно нарушило бы презентацию, если бы пришлось перенести определенные функции из администратора в другие области сайта.
Если у вас есть какие-либо предложения, пожалуйста, дайте мне знать!
Для справки, вот некоторые результаты оболочки, демонстрирующие, что у пользователя есть разрешения change_partyline для объекта Partyline:
>>> from django.contrib.auth.models import User
>>> u = User.objects.get(id=2)
>>> from apps.partylines.models import Partyline
>>> p = Partyline.objects.get(id=3)
>>> u.has_perm('partylines.change_partyline', p)
True
А вот мой модуль partylines.admin
(которыйпоказывает, как модуль Partyline заполняется в админке):
from django.contrib import admin
from guardian.admin import GuardedModelAdmin
from apps.partylines.models import Partyline
class PartylineAdmin(GuardedModelAdmin):
list_display = ('did', 'name', 'listed')
ordering = ('did',)
search_fields = ('did', 'name')
admin.site.register(Partyline, PartylineAdmin)