괴발개발/Django

[Django] User Group을 이용하여 권한을 부여해보자 (minxin사용)

이태원프리덤# 2021. 8. 4. 15:43
728x90

django에서 user를 이용하여 view에 접근 권한을 주려면 여러방법이 있다

user마다 개인권한을 주는 방법이 있지만 그룹으로 권한을 주고  싶을 땐 django의 기본 셋팅되어있는 user group를 이용해 mixin을 만들어 view에 권한을 줄 수 있다

mixin.py 파일 생성

from django.core.exceptions import PermissionDenied


class GroupRequiredMixin(object):
    """
        group_required - list of strings, required param
    """

    group_required = None

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated():
            raise PermissionDenied
        else:
            user_groups = []
            for group in request.user.groups.values_list('name', flat=True):
                user_groups.append(group)
            if len(set(user_groups).intersection(self.group_required)) <= 0:
                raise PermissionDenied
        return super(GroupRequiredMixin, self).dispatch(request, *args, **kwargs)

 

view.py 에 demo 함수

from .mixins import GroupRequiredMixin
from django.views.generic import View

class DemoView(GroupRequiredMixin, View):
  group_required = [u'admin', u'manager']
  
  # View code...

 

사용하려는 demo 함수에 mixin을 상속받아 group_required에 user group을 리스트 형식으로 적어놓으면 된다

user group는 기본 장고어드민에서 생성할 수 있다

728x90