Permission 공부하기
이 포스트의 내용을 바탕으로 기능을 만들어보려고 한다.
django에서 권한에 대한 기본적인 기능들을 제공하고 있다고 나와있다.
is_superuser
$ create superuser로 생성한 user에 대해=Ture로 설정된다is_superuser=True인 경우 permission을 주지 않아도 모든 권한을 가진다
is_staff
=True로 설정할 경우 admin 페이지(관리자 페이지)에 접속할 수 있다- 그 외 다른 부분에서는 일반 유저와 동일한 권한을 가진다
 
is_active
=False일 경우 그 어떠한 권한도 주어지지 않는다- 로그인도 불가능하다
 
Permission(권한)에는 어떤 종류가 있는지 먼저 알아봐야겠다.
django REST framework(이하 DRF)을 사용하기 때문에, 여기서 제공하는 Permission에는 어떤 것이 있는지 보겠다.
AllowAny(기본값): 인증 여부를 묻지 않고 해당 view의 호출을 허용한다isAuthenticated: 인증된 요청에 한하여 view의 호출을 허용한다isAdminUser: staff로 인증된 요청에 한하여 view의 호출을 허용한다isAuthenticatedOrReadOnly: 인증되지 않은 요청에 대해서는 읽기 권한만 주어진다DjangoModelPermissions: 인증된 사용자의 요청에 한하여 view 호출을 허용하고 유저별 인증&권한 확인을 수행한다DajngoModelPermissionsOrAnonReadOnly: 위와 비슷하나 인증되지 않은 요청에 대해서는 읽기 권한 주어진다DjangoObjectPermissions: 인증되지 않은 요청을 거부하며 레코드에 대한 인증된 접근이 권한을 가지고 있는지를 확인한다
이제 이러한 권한을 지정하는(부여하는) 작업을 해볼 차례다.
APIView에서는 permission_classes를 통해 권한 지정을 할 수 있다고 설명되어 있다.
APIView를 상속받은 Viewset 또한 동일하게 기능을 구현할 수 있다.
내가 보면서 배우고 있는 이 포스트의 views.py 내용을 응용하여, 이전 프로젝트에서 사용했던 코드를 수정&추가하는 것이 좋아보인다.
모델은 이걸 사용하고
# models.py
# 이두 운동 관련된 모델
class BicepsCurl(models.Model):
    username = models.ForeignKey(User, on_delete=models.CASCADE)
    count = models.IntegerField()
	...
	...
    class Meta:
        ordering = ['created']
ModelViewSet을 사용하여 그 안에 permssion_classes를 사용할 것임.
# views.py
class BicepsViewSet(ModelViewSet):
    queryset = BicepsCurl.objects.all
    serializer_class = BicepsSerializer
    permission_classes = [
        IsAuthenticated,
    ]
이렇게 해놓은 걸 urls.py에 추가해준다.
# urls.py
from django.contrib.auth import views as auth_views
    path('bicepview/', views.BicepsViewSet.as_view(), name='BicepsViewSet'),
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
auth_views는 django에서 제공하는 LoginView와 LogoutView를 사용하기 위해 import 해놓은 것이다. import 시에 views와의 충돌을 막기 위해 auth_views라는 이름으로 import하였다.
이렇게 해놓고 Insonmia로 /bicepsview 주소부터 무작정 접속을 해보려고 했다.
그런데

$ python manage.py runserver에서부터 에러가 났다!
요러요러한 에러 내용을 볼 수가 있는데..
The `actions` argument must be provided when calling `.as_view()` on a ViewSet. For example `.as_view({'get': 'list'}
그럼 일단 다른 것부터 해본다.
path('bicepview/', views.BicepsViewSet.as_view(), name='BicepsViewSet'),를 주석처리하고 $ runserver를 해보니 서버가 올라간다.
/login에 로그인 요청을 해본다.
오랜만에 403 Forbidden을 보게 되었다.
Web이었다면 템플릿(*html)으로 form을 작성하고 그 안에 {% csrf_token %}을 붙여주는 것으로 문제를 해결할 수 있을 것 같다. 그런데 App 또는 그 수준의 외부에서 어떤 요청을 보낼 때 csrf_token을 어떻게 해야할지 잘 모르겠다.
BicepsViewSet에서 발생한 에러도 form에서라면 action= 을 명시해줘서 해결 할 수 있을 것 같다.
으아 머리가 아프다.
간단한 web을 하나 구축해서 이쪽을 다시 시도해봐야겠다.
[Django] Authentication 과 Permissions
[Django Rest Framework] ModelViewset 동작에 대해 (queryset, get_object)
Django CSRF 쿠키가 설정되지 않음
stackflow: The actions argument must be provided... 
4강 로그아웃 구현하기
Author And Source
이 문제에 관하여(Permission 공부하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cdspacenoob/Permission-공부하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)