[파이썬][Django] 사용자 권한과 그룹 설정 방법과 예제

Django에서 사용자 권한과 그룹을 설정하는 방법과 예제를 살펴보겠습니다. 사용자 권한과 그룹은 웹 애플리케이션의 접근 제어와 권한 관리에 중요한 역할을 합니다.

1. 사용자 권한 정의

먼저, 사용자 권한을 정의해야 합니다. 이는 Django의 Permission 모델을 통해 수행됩니다. 예를 들어, “Can add post”와 “Can delete post”와 같은 권한을 정의하는 방법은 다음과 같습니다:

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

# ContentType을 사용하여 모델 식별
content_type = ContentType.objects.get_for_model(MyModel)

# 권한 생성
add_permission = Permission.objects.create(
    codename='can_add_post',
    name='Can add post',
    content_type=content_type,
)
delete_permission = Permission.objects.create(
    codename='can_delete_post',
    name='Can delete post',
    content_type=content_type,
)

2. 그룹 생성

그룹은 권한을 묶는 데 사용됩니다. 예를 들어, “포스트 관리자” 그룹을 만들고 해당 그룹에 권한을 할당하는 방법은 다음과 같습니다:

from django.contrib.auth.models import Group

# 그룹 생성
admin_group = Group.objects.create(name='포스트 관리자')

# 그룹에 권한 할당
admin_group.permissions.add(add_permission)
admin_group.permissions.add(delete_permission)

3. 사용자에게 그룹 할당

이제 사용자에게 그룹을 할당할 수 있습니다. 사용자가 그룹에 속하면 해당 그룹에 할당된 권한을 상속합니다:

from django.contrib.auth.models import User

# 사용자 생성
user = User.objects.create_user('username', 'email@example.com', 'password')

# 사용자에게 그룹 할당
user.groups.add(admin_group)

4. 뷰에서 권한 확인

뷰에서 권한을 확인하려면 @permission_required 데코레이터를 사용할 수 있습니다. 예를 들어, “Can add post” 권한이 있는 사용자만이 게시물을 추가할 수 있는 뷰를 작성하는 방법은 다음과 같습니다:

from django.contrib.auth.decorators import permission_required

@permission_required('myapp.can_add_post', raise_exception=True)
def add_post(request):
    # 게시물 추가 로직

위의 코드에서 @permission_required 데코레이터는 사용자의 권한을 확인하고 권한이 없는 경우 403 Forbidden 응답을 반환합니다.

이러한 방법을 사용하여 Django에서 사용자 권한 및 그룹을 설정하고 권한을 관리할 수 있습니다.