Пользователи, которые были назначены группе с правами «добавления», могут получать доступ, копировать, перемещать и добавлять страницы, созданные другими пользователями, с помощью поиска администратора или путем прямого ввода правильного пути в браузере.
Цель состоит в том, чтобы пользователи не видели ничего, что делают другие пользователи. Я думал, что это в значительной степени осуществлено.
Дерево моей страницы выглядит так:
Главная> Персоны> Персона> Персональная история
Пользователи регистрируются в учетной записи и автоматически назначаются в пользовательскую группу «Авторы». Эта группа имеет разрешения на добавление и публикацию на странице «Персоны». Пользователь несет ответственность за любое количество людей в своей команде. С помощью этой настройки они могут добавить страницу профиля для каждого члена своей команды. Затем можно добавить несколько историй для каждого человека с профилем. Теперь у каждого человека есть подстраницы историй, связанные с их профилем.
У меня настроен проводник страниц, поэтому пользователи видят только свои страницы:
@hooks.register('construct_explorer_page_queryset')
def show_authors_only_their_articles(parent_page, pages, request):
user_group = request.user.groups.filter(name='Authors').exists()
if user_group:
pages = pages.filter(owner=request.user)
return pages
Средство выбора изображений также отображает только изображения, загруженные пользователем:
@hooks.register('construct_image_chooser_queryset')
def filter_images_by_user(images, request):
images = images.filter(uploaded_by_user=request.user)
return images
И элементы сводной страницы показывают только то, что принадлежит пользователю, использующему подобный код.
Но во время финального тестирования я обнаружил, что поиск, выполненный с помощью административного поиска, приводит к списку всех доступных страниц «Персональный профиль» и «Персональная история» с этими поисковыми терминами. Например, если они ищут «Джона», все страницы «Профиль» и «История» возвращаются для Джона. Пользователи могут затем нажать на странице профиля Джона. Зайдя на страницу профиля Джона в проводнике, они могут добавлять истории в профиль Джона, копировать, перемещать или отменять их публикацию! Они могут сделать то же самое с историями Джона, за исключением добавления подстраницы.
Это изменит правила игры и не будет работать для нас.
Я посмотрел вокруг и увидел, что может быть несколько решений:
1) Создайте аналогичную настройку с помощью ModelAdmin, но я думаю, что у меня возникнет та же проблема. При поиске пользователи по-прежнему смогут находить и манипулировать запрещенным контентом.
2) Создайте уникальную группу пользователей для каждого пользователя, как рекомендуется в этом посте: Трясогузка на страницу разрешения пользователя
Во втором методе после создания пользователя мне потребуется программно:
1) Создайте новую группу пользователей только для них, возможно, используя их имя пользователя.
2) Назначить их новой группе пользователей
3) Создайте новую страницу «Персона», специфичную для них, и предоставьте им разрешения «добавлять» и «публиковать».
Последний шаг, потому что, кажется, что если я назначу их всем одной и той же персоне, они все равно смогут добавлять страницы в профили других пользователей, независимо от того, находятся ли они в другой группе пользователей, поскольку все эти разные группы пользователей по-прежнему будут добавить доступ к той же странице персонажа.
В конечном счете мне нужно заблокировать каждого пользователя от того, что делают другие пользователи. Ваши мысли очень ценятся. Прошли годы с тех пор, как я занимался программированием, и я все еще догоняю. А пока я начну видеть, что могу придумать.
Я думаю, что мы довольно близки. Система работает и работает так хорошо!