Django 05. 사용권한 Decorator 구현
Python Decorator 기능으로 프로젝트 각 앱의 권한을 설정하는 함수를 구현합니다.
1. decorators.py 생성
각 앱마다의 사용권한, 예를 들어 공지사항 게시판의 글작성은 관리자 권한의 사용자만, 시험시간표와 같은 기능은 컴퓨터공학부 사용자만 이용할 수 있도록 구현하기 위해 Python에서 제공하는 Decorator 기능을 사용하겠습니다.
users app 내에 decorators.py라는 파일을 생성해주고 아래의 소스를 입력합니다
1 | # users/decorators.py |
login_message_required
게시판 글작성 등과 같이 로그인한 사용자에게만 권한을 주기 위해 django에서 제공하는 Authentication System인 is_authenticated로 현재 사용자가 로그인 중인지 확인합니다.
(django는 기본적으로 사용자의 접속여부를 판별하는 @login_required를 django.contrib.auth.decorators에서 제공하고있습니다.) Django Authentication 공식문서
request.user로 현재 사용자의 접속상태를 확인하고 비로그인시 django의 message framework 기능을 사용하여 쿠키값에 로그인이 필요하다는 메세지를 담아 이전 포스트에서 설정한 settings.py의 login 경로로 redirect시킵니다. 이 message는 1회성으로 사용자에게 경고창, 확인창 등을 표시할때 유용하게 사용됩니다.
admin_required
공지사항 글작성, 타 게시판 글삭제, 댓글삭제, 학사일정과 같은 기능을 사용할 수 있는 권한을 설정하기 위해 model 생성 부분에서 지정한 사용자의 level 필드를 비교하고 관리자 권한의 사용자가 아닐시 접근 불가 메세지와 함께 나중에 생성할 main 경로로 redirect 시킵니다.
logout_message_required
이미 로그인한 사용자의 회원가입, 로그인을 막기 위해 is_authenticated로 접속중인 사용자를 판별합니다.
2. decorator 적용
위에서 구현한 decorator를 적용하는 방법은 아래와 같습니다.
FBV (Fuction Based View)
1 | from users.decorators import * |
CBV (Class Based View)
1 | from users.decorators import * |
Django 내장 login_required 사용
decorator를 따로 구현할 필요가 없는 경우 django에서 기본으로 제공하는 login_required를 사용할 때는 아래의 import만 추가하면 됩니다. 사용방법은 위와 동일합니다.
1 | from django.contrib.auth.decorators import login_required |