2017-11-15 10 views
1

내 고객이 삭제/작성하는 경우 django-guardian을 사용하지 않기로했습니다. ModelManager에 기존 오버레이를 추가하여 새로운 그룹으로 이전해야합니다. 따라서 Django REST를 통해 filter_queryset으로 필터링 된 인스턴스가 내 경우에는 문제가되지 않습니다.Django 권한이 그룹에 속하지만 해당 그룹의 사용자에게 그룹의 권한이 없습니다

FailedTestCase :

from django.contrib.auth.models import User 

from poinkbackend.apps.companies.models import Company 
from poinkbackend.apps.roles.models import Role 
from poinkbackend.apps.userroles.models import UserRole 
from poinkbackend.apps.commons.tests import companies, userprofiles, branches 

def test_support_view_userprofile(companies, userprofiles): 
    company = Company.objects.get(name='Singh') 
    support = Role.objects.add_support('firstsupport', company) 
    user = User.objects.get(username='notty') 
    UserRole.objects.create(user=user, role=support) 
    user.refresh_from_db() 
    import pdb; pdb.set_trace() 
    assert True is user.has_perm('view_userprofile') 
-> assert True is user.has_perm('view_userprofile') 
(Pdb) user.groups.first() 
<Group: firstsupport-Singh> 
(Pdb) g1 = user.groups.first() 
(Pdb) g1.permissions.all() 
<QuerySet [<Permission: userprofiles | user profile | View UserProfile>]> 
(Pdb) user.has_perm('view_userprofile') 
False 

질문 :
는 어디에서 잘못입니까?

업데이트 2017년 11월 16일 10시 30 분 GMT + 7 추가 4 URL 기 스트 :
회사 : https://gist.github.com/elcolie/684ba34391d0a94df7ca98855cea765b
역할 : https://gist.github.com/elcolie/64a3a3daf22240b2072e113eb10164e2
UserRole : https://gist.github.com/elcolie/d28e7fcf54334a9f13df5fff1b7d9fe0
BusinessPermisson : https://gist.github.com/elcolie/bbeb00f41db0c7884cee34c6bccaf5f9

참고 문헌 :
나는이 오류의 근본 원인을 찾을 수 있지만Django user has_perm returning false even though group has permission
Django user not getting the assigned group's permissions
django group permission

+0

죄송합니다. 나는'FailedTestCase' 요지에서 디버깅 라인을 업데이트했다. – Sarit

+0

오노 내 잘못입니다. 'user.has_perm ('userprofiles.view_userprofile')'. 'app_label'을 잊어 버렸습니다. – Sarit

+0

예제를 수정하는 것이 좋습니다. 추적하기가 어렵습니다. ''add_support'' 메소드는 무엇입니까? 그녀의 코드는 어디에 있습니까? 왜 pdb입니까? 이 예제 이후에 불필요한 점프를 방지하기 위해 콘솔 모드를 사용하지 않는 이유는 무엇입니까? 모델이 어디 있습니까 ("회사", "역할", "사용자 역할"이란 무엇입니까?)? –

답변

0

. @ Adam Dobrawy 주석에 따라 질문을 업데이트했습니다.

문제는 보호자의 명령을 뒤섞 었습니다. django-guardign 구문 앞에 app_label없이 사용할 수 있습니다. 내 경우에는 내가이 다시 user.has_perm('userprofiles.view_userprofile')

와 라인 user.has_perm('view_userprofile')를 교체해야 userprofiles

입니다. 제 질문을 읽으면서 시간과 노력을 아담에게 고맙습니다.