코드 몇줄로 간단하게 권한을 부여할 수 있다.
user = User.objects.get(username='testuser')
perm = Permission.objects.get(codename='model.add_model')
user.user_permissions.add(perm)
여기서 주의할 점은 적용되긴하지만 has_perm
등으로 확인하면 해당 권한이 없다고 나온다는 점이다. 이는 캐싱되어 있는 정보때문에 그렇다. 캐시를 지우거나 인스턴스를 새로 불러오면 올바르게 적용된걸 확인할 수 있다.
아래와 같이 해결할 수 있다.
del user._perm_cache
del user._user_perm_cache
# OR
user = User.objects.get(id=10)
아래 링크를 참고할 수 있다. - stackoverflow - Pytest-django: set user permissions