본문 바로가기
Django

Django 사용자별 페이지 접근 권한 설정하기

by 개발자54 2022. 12. 7.

사용자별 권한 제한 여부 목록 (가능, 불가능)

- 관리자(superuser) : 조회, 추가, 수정, 삭제

- 회원(user) : 조회, 추가, 수정, 삭제

- 비회원 : 조회, 추가, 수정, 삭제

 

여기서 권한 제한이란, 프론트엔드 페이지에서 해당 페이지로 가는 버튼이 보이지 않는 것을 말함

 

1. 비회원 조회, 추가, 수정, 삭제 페이지 접근 제한

<!-- fst/templates/fst/rcptable_create.html -->

{% extends 'base.html' %}
{% block title %}레시피를 추가해봅시다~{% endblock %}

{% block content %}

<!-- 추가한 코드 -->
{% if user.is_authenticated %}
<!-- 추가한 코드 끝 -->

<form action="" method="post">
    {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value="Add" class="btn btn-info btn-sm">
</form>

<!-- 추가한 코드 -->
{% else %}
레시피 목록을 볼 수 있는 권한이 없습니다. 로그인 해 주세요.
{% endif %}
<!-- 추가한 코드 끝 -->

{% endblock %}

 

 

2. 관리자로 로그인했을 때만 관리자 메뉴 뜨게 하기

<!-- templates/base.html -->

...
    <li class="nav-item"><a href="{% url 'logout' %}" class="nav-link">로그아웃</a></li>
        <!-- 추가한 코드 -->
        {% if user.is_superuser %}
        <!-- 추가한 코드 끝 -->
        <li class="nav-item"><a href="{% url 'admin:index' %}" class="nav-link">관리자</a></li>
        <!-- 추가한 코드 -->
        {% endif %}
        <!-- 추가한 코드 끝 -->
    <li class="nav-link">{{user.first_name}}{{user.last_name}} 님, 환영합니다!</li>
    ...

 

 

3. 회원은 글쓰기, 수정, 삭제 버튼 볼 수 없게 하기 + 해당 페이지 접근 불가

2번과 똑같이 글쓰기, 수정, 삭제 버튼 앞뒤부분에 {% if user.is_superuser %} {% endif %} 코드를 추가해주면 된다.

또한 글쓰기, 수정, 삭제 페이지에 접근 자체가 불가능하도록 페이지 자체에도 코드를 추가해준다.

 

그러나 이와 같은 방법으로 완벽하게 접근 구현이 되는 것인가 의문이다.

뭔가 어떻게든 뚫고 들어갈 수 있지 않을까... 싶어서

더 완벽한 방법이나 다른 방법이 없는지 나중에 찾아봐야 할 것 같다.

Spring만 하다가 Django를 다뤄보니 뭔가 찝찝한 점이 많다.

댓글