2012-01-04 12 views
2

djangoで権限の問題をデバッグするにはどうすればよいですか?Django権限のデバッグをデバッグ

私はこのようなコードを使用します。「foo.bar」にタイプミスがある場合

if request.user.has_perm('foo.bar'): 

どのように私は知っていることができますか?

答えて

2

回答が見つかりました。

--- django/contrib/auth/backends.py (Revision 17045) 
+++ django/contrib/auth/backends.py (Arbeitskopie) 
@@ -43,6 +43,9 @@ 
     return user_obj._perm_cache 

    def has_perm(self, user_obj, perm): 
+  all_perms=[u'%s.%s' % (ct, name) for ct, name in Permission.objects.values_list('content_type__app_label', 'codename')] 
+  if not perm in all_perms: 
+   raise Exception('Permission %s does not exist. foo permissions: %s' % (perm, [p for p in all_perms if 'foo' in p])) 
     if not user_obj.is_active: 
      return False 
     return perm in self.get_all_permissions(user_obj) 
+0

をあなたはむしろジャンゴを変更するよりも、これを行うにはあなた自身のバックエンドを書くことができますだけで(一時的に)backends.pyのコードを変更源:https://docs.djangoproject.com/en/1.3/topics/auth/#handling-authorization-in-custom-backends –

1

さて、私はあなたがすべてで定義された権限に見えることができると思います:

from django.contrib.auth.models import Permission 
perms = ['%s.%s' % (p.content_type.app_label, p.codename) 
    for p in Permission.objects.all()] 

>>> 'foo.bar' in perms 
False 
+0

他の溶液(一時的にDjangoのソースを変更する)またはカスタム・バックエンドは利点を有する:Iすべての私のunittestを実行することができ、私は何かの入力ミスがあるかどうかを確認します。 – guettli

+1

あなたはユニットテストではなく、デバッグについて質問しました。それにもかかわらず有用である。私は間違いなく、猿のパッチにカスタムバックエンドをお勧めします。そうすることで、実稼働環境ではなく、テスト専用に有効にすることもできます – second