user permission 권한 관리

User permission

장고의 기본 User 모델에는 User permission에 대한 필드를 제공한다.

이 권한은 admin에서는 바로 적용되지만 만든 앱에서도 적용하기 위해서 쉬운 2가지 방법이 있다.

  • Class-base
  • decorator

Class-base

View가 Class-base 방식으로 작성되어있다면 PermissionRequiredMixin 를 상속받아 권한을 적용시킬 수 있다.

업무 생성하는데 요구 권한을 설정하려면 다음과 같이 하면 된다.

from django.contrib.auth.mixins import PermissionRequiredMixin

class CreateWorkView(PermissionRequiredMixin, CreateView):
    raise_exception = True
    permission_required = 'main.add_work'
    # 여러 권한
    # permission_required = ('polls.can_open', 'polls.can_edit')
    model = Work
    form_class = WorkForm
    template_name = 'main/work_form.html'

    def get_success_url(self):
        return reverse('index')
    
  • permission_required : ‘앱이름.권한코드이름’ 형식으로 요구 권한을 지정할 수 있다. 해당 유저가 가지고 있지 않으면 403에러를 발생시킨다.
  • raise_exception : boolean 속성. True로 하면 PermissionDenied 에러를 발생시킨다. False로 하면 설정된 login page로 redirect 시킨다.

decorator

@permission_required() 을 사용하면 쉽게 함수형 view에서도 권한 설정을 할 수 있다.

@permission_required('main.delete_work', raise_exception=True)
def delete_work(request, id):
    if request.method == "GET":
        work = Work.objects.get(pk=id)
        work.delete()
        return redirect('/')

raise_exception 이 False면 login 페이지로 간다. True 로 하면 똑같이 403을 발생시킨다.

403 에러

기본적으로 장고는 403에러가 발생하면 root의 templates 디렉토리에서 403.html을 찾아 render한다. 없다면 “403 Forbidden”이란 텍스트를 전달한다.

403.html을 만들고 업무 생성 페이지를 들어가려 하면 다음과 같이 403.html을 render 해주는 것을 볼 수 있다.

김땡땡's blog

김땡땡's blog

김땡땡