2010-02-17 2 views

답변

6

정확히 무엇을하려는 것인지 잘 모르겠지만 교사의 사용자 관리 기능이 기본 제공되는 사용자 관리 페이지가 약간 다른 경우라면 확장해야한다고 생각합니다. UserAdmin을 입력하고 queryset 메서드를 재정의하십시오.

당신의 검색어를 변경하거나 삭제할 수있는 개체를 가져 queryset 메서드에서 반환 사용하는 ModelAdmin 코드, change_viewdelete_view이 방법에서 보면 때문에, 편집하거나 다른 기록을 삭제하는 교사를 허용하지 돌볼 것입니다

class TeacherSpecificUserAdmin(UserAdmin): 
    def queryset(self, request): 
    if request.user.is_teacher(): 
     return Teacher.objects.filter(pk=request.user.pk) 
    return UserAdmin.queryset(self, request) 
.

암호를 변경하는 데 사용 된보기가 UserAdmin의 다른보기와 동일한 시스템을 사용하여 개체를 변경하기 때문에 한 번 더 조정해야합니다. 새로운 수업에서 다음 내용을 무시하십시오.

... 
def user_change_password(self, request, id): 
    if request.user.is_teacher() and request.user.pk != int(id): 
    # PermissionDenied is in django.core.exceptions 
    raise PermissionDenied 
    return UserAdmin.user_change_password(self, request, id) 
... 

그 후, 교사는 새로운 사용자를 추가하거나 자신의 기록을 삭제하지 않아야합니다. 기본값 인 django's permission framework을 사용하거나 has_add_permissionhas_delete_permission 메서드를 재정 의하여합니다.

자세한 내용을 보려면 ModelAdmin 소스 코드를 확인하십시오 (contrib/admin/options.py).

+0

+1 Thanks Clement! user_change_password()를 이해하려고합니다. 코드를 읽는 것이 좋습니다. – Viet

1

현재로서는 쉬운 방법이 없지만 Django 1.2에서는 object level permissions이 곧 제공 될 예정입니다. 관리자가 작동하려면 약간의 작업을해야하지만.

다행히도해야 할 일이 설명되어있는 Django Advent article이 있습니다.

3

아마도 이렇게하려면 빌드가되지 않았습니다.

permission docs 참조 :

권한이없는 특정 객체 인스턴스 당, 전 세계적으로 객체의 유형에 따라 설정됩니다. 예를 들어 "Mary는 뉴스 기사를 바꿀 수 있습니다."라고 말할 수는 있지만 "Mary는 뉴스 기사를 변경할 수 있지만 자신이 만든 뉴스 만 변경할 수 있습니다"또는 "Mary는 특정 상태의 뉴스 기사 만 변경할 수 있습니다 , 발행일 또는 신분증. " 후자의 기능은 장고 개발자들이 현재 논의하고있는 것입니다.

그러나 분명히 object level permissions이 나타납니다.