2016-04-05 5 views
1

私のプロジェクトでは、ビューのカスタム権限を実装しようとしていました。コンフィギュレーション・チームはそれが当てはまらない場合は、外のユーザーを要求し、ブロックしているチームのページに一致した場合DRFカスタム権限がビューをブロックしない

class TeamViewPermission(permissions.BasePermission): 
    """ 
    Global permission for viewing team pages 
    """ 

    def has_permission(self, request, view): 
     team_id = self.kwargs.get('team_id') 
     teamqs = MAIN_TEAMS.all() 
     pk_list = [] 
     for item in MAIN_TEAMS: 
      pk_list.append(str(item.pk)) 
     if team_id in pk_list: 
      return True 
     return False 

非常にシンプル、チェック:私はこのようになりますされ、permissions.pyに許可を作成しました。

views.py

class PlayerList(ListView): 

    model = player_model 
    template_name = 'player_list.html' 
    permission_classes = (TeamViewPermission,) 

def get_team(self): 
    if not hasattr(self, '_team'): 
     team_id = self.kwargs.get('team_id') 
     self._team = team_model.objects.get(pk=self.kwargs.get('team_id')) 
    return self._team 

def get_context_data(self, *args, **kwargs): 
    context = super().get_context_data(*args, **kwargs) 
    context['team'] = self.get_team() 
    return context 

def get_queryset(self, *args, **kwargs): 
    queryset = super().get_queryset(*args, **kwargs) 
    return queryset.filter(team_id=self.kwargs.get('team_id')) 

私はそれが必要それがページをブロックしていないですが、私は、それをデバッグするため、ページは、TrueまたはFalseを返すという事実を知っていますか?ページのFalseを返しますが、Trueを返したようなページにはまだアクセスできます。ここに何か不足していますか?

+0

ビューのコードを追加できますか? – ilse2005

+0

ええ、私は今それを追加しました。それは本当にあまりありません – dnsko

答えて

2

djangosクラスベースのビューとDRFビューが混在しているようです。 ListViewは、djangoのクラスベースのビューであり、DRFのものではありません。したがって、permission_classesを設定することはできません。

the docsを確認して、DRF APIビューの使用方法を確認してください。

+0

ああ私は何を参照してください..どのような間違いハハ。次回はそれにもっと注意を払うつもりです。助けてくれてありがとう! – dnsko

+0

ようこそ。私の答えが助けられたら、受け入れてupvoteしてください。 – ilse2005

+0

確かに、upvoted – dnsko

関連する問題