오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Web Programming/Django

Django - 사용자별 관리자 페이지 접근권한 수정

junha6316 2020. 10. 11. 21:20

관리자 페이지는 다양한 사람들이 오갈 수 있다.

그렇다면 사용자 별로 관리자 페이지 접근권한을 제한할 수 없을까?

 

user app을 하나 생성 후 Custom된 User 모델을 사용한다.

from django.contrib.auth.models import AbstractBaseUser,BaseUserManager,PermissionsMixin
from django.db import models 
class UserManager(BaseUserManager):    
    use_in_migrations = True    
    def create_user(self, email, nickname, password=None):        
        
        if not email :            
            raise ValueError('must have user email')        
        user = self.model(            
            email = self.normalize_email(email),            
            nickname = nickname        
        )        
        user.set_password(password)        
        user.save(using=self._db)        
        return user     
        
    def create_superuser(self, email, nickname,password ):        
       
        user = self.create_user(            
            email = self.normalize_email(email),            
            nickname = nickname,            
            password=password        
        )        
        user.is_admin = True        
        user.is_superuser = True        
        user.is_staff = True        
        user.save(using=self._db)        
        return user 
        
class User(AbstractBaseUser,PermissionsMixin):    
    
    objects = UserManager()
    
    email = models.EmailField('이메일',   
        max_length=255,        
        unique=True,    
    )    
    nickname = models.CharField('아이디',
        max_length=20,
        null=False,
        unique=True
    )     
    is_active = models.BooleanField(default=True)    
    is_admin = models.BooleanField(default=False)    
    is_superuser = models.BooleanField(default=False)    
    is_staff = models.BooleanField(default=False)     
    date_joined = models.DateTimeField('가입 일',auto_now_add=True)

    USERNAME_FIELD = 'nickname'    
    REQUIRED_FIELDS = ['email']

    class Meta:
        verbose_name_plural = "관리자 페이지 사용자"

 

settings.py를 아래와 같이 고쳐준다.

AUTH_USER_MODEL = "users.User"
# 생성한 app.(AbstractBaseUser)를 상속한 모델 클래스의 이름 

 

다음은 아래 명령어로 superuser를 만들어준다.

python manage.py createsuperuser

 

이제 admin page로 가면 새로운 user가 생긴것을 확인할 수 있다.

새로 생성한 유저에 들어가보면

Groups에 들어거 유저 권한을 바꿔주거나

User permissions에서 필요한 권한만을 선택한다

 

마지막으로 is active와 is staff만 빼고 모두 체크 박스를 해제해준다.

이렇게 해두고 저장하면 자동으로 관리자 페이지에 대한 접근이 막히고 다시 로그인하면

위와 같이 접근 가능한 app의 model만 창이 나오게 된다. 원래 창은 이렇게 생겼다.

 끝

다들 즐겁게 장고 하시길~