При переходе от sqlite к СУБД PostgreSQL метод has_perm некорректно работает с программно созданными разрешениями
Недавно я перевел свое приложение django с sqlite на PostgreSQL.
После настройки БД PostgreSQL я сделал dumpdata
в файл json, изменил файл settings.py
соответственно новому движку, а затем loaddata
. Все работало должным образом*.
Моя точка входа для моего сайта следующая:
@login_required
def index(request):
"""View function for home page of site."""
if request.user.has_perm("myapp.access_main"):
return redirect("myapp:main")
elif request.user.has_perm("myappp.access_second"):
return redirect("myapp:second")
else:
return PermissionDenied
У пользователей нет прав в моем приложении, но у групп, в которые они входят, есть.
У меня есть 2 группы (mods и group1, обе имеют разрешение "myapp.access_main", как и в моей старой базе данных).
Если я подключаюсь как admin (суперпользователь, которого я создал с помощью sqlite db, входящий в группу mods), все работает нормально, я перенаправляюсь на главную страницу. Однако, если я подключаюсь как user1 (пользователь, созданный через интерфейс администратора, созданный также с помощью sqlite db, является частью группы group1), метод has_perm(...)
возвращает всегда False, следовательно, возникает ошибка PermissionDenied
Я не понимаю, почему метод has_perm
не работает как положено для не-суперпользователей.
*: Одно важное замечание: мне пришлось сделать дампданные с исключением: ./manage.py dumpdata myapp --exclude=myapp.RightsSupport
. RightsSupport - это неуправляемая модель, которая создала мои 2 разрешения ("myapp.access_main" и "myapp.access_second"). Я думаю, что проблема может возникнуть из-за этого, но я не уверен и не знаю, что делать. Похоже, что разрешения были созданы правильно, так как метод has_perm
отлично работает с моим admin...
Картинка стоит тысячи работ: Вот 2 скриншота https://imgur.com/a/izAeQKS. Мне пришлось размыть и добавить красный текст, чтобы сделать его похожим на пример этого поста