본문 바로가기

TIL

[TIL 2024. 05. 14 ] Admin page

일단 우리 팀에서는 관리자(admin)/점주(staff)/고객(키오스크 사용자, user)으로 단계가 나뉜다

 

처음에는 관리자와 점주의 관리 페이지를 템플릿까지 만들려고 했지만, 튜터님이 그렇게 하면 프로젝트의 사이즈가 크니, 일단 키오스크단을 실행시키는 것에 집중하라고 피드백을 주셨다

 

그 결과, 일단은 admin과 staff의 관리 페이지는 django가 기본적으로 제공하는 admin page를 custom해서 사용하기로 했다. 특히 admin은 staff에 대한 CRUD는 물론 staff가 1차적으로 관리하는 메뉴에 대해서도 CRUD를 할수 있어야 한다. 또한 staff는 메뉴에 대한 CRUD만 할 수 있도록 권한을 제한해줘야 한다.


 

admin page → 점주 CRUD, 메뉴 CRUD

  • django 기본 User모델 사용:
    • 처음에는 accounts에 Staff라는 별도의 모델을 만들어서 사용해봤지만, Staff탭에서 생성한 점주의 계정으로는 admin page 로그인이 안됨
    • 그래서 django 기본 User모델을 사용하고, model은 Menu app의 Menu 모델만 만들어서 사용해봄
    • -> admin page내에서 User에서 각 관리자에 대한 CRUD를 진행하고, 그 과정에서 아래 group속성을 사용함
  • group속성 사용:
    • admin과 staff에 권한 분리해서 부여
    • staff권한은 메뉴 CRUD로 제한
    • 개별 staff CRUD마다 권한을 상이하게 지정해줄 수도 있지만, 일단 모든 staff에게 메뉴 CRUD가 공통적인 권한으로 있어야 하므로, "Staff"라는 이름의 Group속성을 미리 생성해서 사용하면 편리
  • 메뉴 생성시 자동으로 현재 로그인한 staff의 username이 입력되도록:
    • model에 있는 username이 null=True, blank=True되어 있지 않은 상태에서 메뉴 생성시에 username에 대한 staff의 입력없이 add Menu하려니 계속 오류가 발생
    • 공식문서를 찾던 중_save model()을 사용해서 request에서 username에 대한 정보를 받아와서 사용함 -> add Menu시에 staff가 자신의 username을 입력하지 않아도 자동으로 username에 대한 정보도 처리됨
  • admin과 staff로 각자 로그인시 filter탭이 다르게 생성: get_queryset() 오버라이딩
  • admin에만 user filter 및 메뉴 CRUD까지 부여: get_list_filter() 오버라이딩