2017-08-18 1 views
0

私の英語のために申し訳ありません。今私はdjangoの休憩を学び、私はユーザーのためのカスタム許可を作成しようとします。フォックスの例の許可: "big"と "small"。カスタム許可は常にtrueを返す、django

permission = Permission.objects.get(name='big') 
     user.user_permissions.add(permission) 
     user.save() 

作成したカスタムクラス、それはクラスのチェック権限:

class IsBigBoy(permissions.BasePermission): 

    def has_permission(self, request, view): 
     return request.user.has_perm('users.big') 

とビューの

私のユーザモデル

class User(AbstractUser): 
    is_active = models.BooleanField(default=False) 
    email = models.EmailField(blank=False, unique=True) 
    avatar = models.ImageField(upload_to='avatar/users', blank=True) 

    class Meta: 
     permissions = (
      ("big", "this is big boy"), 
      ("small", "this is small"), 
     ) 

は、私はこのようなユーザーのものに権限を追加しました私は私のカスタム許可を確認するためのテストクラスを作成する

class MySuperTestRequest(generics.CreateAPIView): 
    permission_classes = (permissions.IsAuthenticated, custom_permissions.IsBigBoy) 
    serializer_class = CreateSomethingSerializer 

    def post(self, 
     return Response({"detail": "good"}, status.HTTP_200_OK) 

問題:

return request.user.has_perm('users.big') 

そのコードは常にtrue

+2

ログインしているユーザがスーパーユーザの場合、 'has_perm'は常に* True *を返します。 'User'モデルを含むアプリケーションの名前は何ですか? – Alasdair

+0

@ Alasdair oooo、あなたの答えに感謝します。私はスーパーユーザーからやってみてください。私はそれをチェックします。アプリケーションコール 'users' –

答えて

1

を返すことがありますが、あなたのロジックにユーザーhas_perms()を必要とし、ユーザーIS_SUPERUSERは、彼がすべての権限を持っている場合を忘れないでください。