문서 생성과 관련된 Django 앱을 작성 중입니다. 사용자가 전혀 어떤 문서를 볼 수 있는지 확인하기 위해제 3 자 행 수준 권한 응용 프로그램을 사용하거나 장고보기에서 쿼리 결과를 필터링하는 것이 더 낫습니까?
- 확인 : 나는 몇 가지 요구 사항이 있습니다.
- 사용자가 문서를 볼 수 있으면 권한이있는 문서 만 볼 수 있도록 허용합니다.
나는 두 가지 해결책을 생각해 냈으며, 하나의 철학적/실제적으로 다른 것보다 나은지 궁금해하고 있습니다.
내가 함께 왔어요 두 솔루션
은 다음과 같습니다해결 한 (사용하여 타사 장고 - 가디언)
Models.py
class Document(models.Model)
owner = models.ForeignKey(User)
document_name = models.CharField(max_length=60)
document_content = models.TextField()
class Meta:
permissions = (
('view_document', 'View Document'),
)
views.py
@permission_required('document.view_document', (Document, 'pk', 'document_id'))
def view_document(request, document_id):
document = Document.objects.get(pk=document_id)
return render_to_response("native/view_events.html",
{
'document' : document,
}, context_instance=RequestContext(request))
솔루션 번호 1에서 볼 수있는 단점은 개체를 만들 때마다 명시 적으로 사용 권한을 설정해야한다는 것입니다. 또한 데이터베이스를 두 번 방문해야합니다. 한 번 사용 권한을 확인하고 다시 개체를 검색해야합니다.
해결 방법 2 (장고 권한 내장 사용)
Models.py
class Document(models.Model)
owner = models.ForeignKey(User)
document_name = models.CharField(max_length=60)
document_content = models.TextField()
viewers = models.ManyToManyField(User)
class Meta:
permissions = (
('view_document', 'View Document'),
)
views.py
@permission_required('document.view_document')
def view_document(request, document_id):
document = Document.objects.filter(pk=document_id, viewers__pk=request.user.pk)[0]
return render_to_response("native/view_events.html",
{
'document' : document,
}, context_instance=RequestContext(request))
내가 솔루션 번호 하나에 볼 수있는 단점은 내가해야한다는 것입니다 2 개의 수표, 하나는 문서를 전혀 볼 수 있는지, 다른 하나는 p를 볼 수 있는지 확인하는 것입니다. 관절 문서. 장점은 모든 문서를 볼 수있는 관리자가 있으면 각 문서에 대한 권한을 명시 적으로 부여 할 필요가 없다는 것입니다. 나는 그에게 'view document'권한을 줄 수있다.
두 솔루션 모두 장단점이있는 것으로 보입니다. 이론/실천면에서 더 나은 점이 있습니까?