2014-06-24 2 views
0

나는 장고에서 권한 시스템을 구현했지만 아주 기본적인 것이므로 더 나은 방법이 있다고 생각합니다.Django에서 권한을 올바르게 수행하는 방법

필자의 이해에서 특정 사용자에게 부착되는 레이블은 무엇인지 궁금합니다. 무엇이 나 한테 무슨 일입니까? 액션 나는 그것들과 연결됩니다. 예를 들어 can_edit은 특정 사용자가 수행 할 수있는 작업의 이름 일 뿐이며 나중에 나에 의해 결정됩니다. 나는 특정 모델에 can_edit 권한을 만들기 위해 명령 줄을 사용

,

from django.contrib.contenttypes.models import ContentType 
from django.contrib.auth.models import Group, User, Permission 

itmod_ct = ContentType.objects.get(app_label='myapp', model='mymodel') 
can_modify = Permission(name='Can Modify', codename='can_modify_model', content_type=itmod_ct) 
can_modify.save() 
#some group of users g 
g.permissions = (can_modify,) 
g.save() 

다음 템플릿에, 나는

{% if perms.myapp.can_modify_model %} 
... action that can be performed 
{% endif %} 

주요 문제와에 둘러싸 관련 기능하여 시행 이 접근법은 앞으로 API를 구현한다고 가정합니다. 예를 들어 동일한 작업을 수행하지만 템플릿이 없으면 응용 프로그램은 마치 모든 권한/권한이없는 것처럼 구현됩니다. 또 다른 (철학적 인) 문제는 템플릿에서 비즈니스 로직을 사용하는 것입니다. 또한 일부보기는 일부 사용자 만 편집 할 수 있다는 점을 제외하면 모든 사용자의 공통된 의견입니다.

답변

0

다시 ... '추가' "특정 모델에 can_edit 허가", '변화'이이 일을 다시

가능성이 중복 있도록 권한을 모든 모델에 대한 장고에 의해 만들어진 자동차입니다 '삭제'

{% if perms.issuetracker.can_modify_itmod %} 
... action that can be performed 
{% endif %} 

이 괜찮습니다, 때문 만이 권한이 실제로 적용됩니다 장소해서는 안됩니다. 이 옵션은 사용자에게 표시 할 옵션을 결정하는 데 사용되는 코드입니다. 권한의 실제 시행은 조치를 처리하는보기에서 발생합니다.

오히려 당신에게 달려 있지만, 일반적으로 비즈니스 로직을 가능한 한 많이 모델로 밀어 넣는 것이 바람직합니다. 일반적으로 여전히 뷰 레이어에서 많은 작업이 수행됩니다. 템플릿에서 비즈니스 로직을 코드로 남겨서는 안됩니다.

관련 문제