2013-05-07 5 views
6

Django 1.5 앱에서 사용자의 허가를 받았습니다. 내가Django : user.has_perm은 항상 true이고 사용자는 수퍼 유저가 아닙니다. 왜?

In [1]: user.get_all_permissions() 
Out[1]: set([u'profile.change_profile']) 

모든 사용자 권한을 나열 할 때 나는 (정확하고 싶어) 하나의 권한을 볼 수 있습니다. 사용자는 관리자가 아닌 수퍼 유저이기도합니다. 내가 user.has_perm를 사용하려고하면

In [2]: user.is_superuser 
Out[2]: False 

그러나, 나는 항상 제출 된 권한 요청에 대한 반환으로 True를 얻을.

In [3]: user.has_perm('random_permission') 
Out[3]: True 

사용자가 수퍼 유저/관리자 인 경우 내가 기대하는 행동. 모든 요청에 ​​대해 수퍼 유저가 아닌 사용자가 항상 True이되는 이유는 무엇입니까? 어떤 설정을 놓쳤습니까? 왕의 근위병 브림 홀에 의해 코멘트에서 언급

+1

사용자 정의 모델 또는 인증 백엔드를 사용하고 있습니까? 어쩌면 여기에있는 문서를 읽어 보시기 바랍니다 : https://docs.djangoproject.com/en/dev/topics/auth/customizing/#handling-authorization-in-custom-backends –

답변

4

으로 당신은 당신의 인증 백엔드를 확인해야합니다. 당신은 django sources에서 사용자 모델의 has_perm 방법에이 댓글을 찾을 수 있습니다 : 사용자가 지정된 권한이

true를 돌려줍니다. 이 방법 은 사용 가능한 모든 인증 백엔드를 쿼리하지만 백엔드가 True를 반환하면 즉시 반환됩니다. 따라서 하나의 인증 백엔드에서 권한을 가진 사용자는 일반적으로 권한을 가지고 있다고 가정합니다.

또한 사용자 그룹을 확인하는 것을 잊지 마세요. 기본 백엔드는 사용자 그룹 권한을 검사하므로 연결될 수 있습니다.

관련 문제