Teacher 클래스에 의해 관리자 권한이 확장/서브 클래 싱되었습니다.Django Admin 사용자가 다른 Admin 사용자의 프로필 데이터를 변경하는 것을 방지하려면 어떻게합니까?
교사가 다른 교사의 프로필 데이터를보고 변경하는 것을 방지하고 교사가 자신의 기록/행만 변경할 수있는 방법은 무엇입니까? 미리 감사드립니다!
Teacher 클래스에 의해 관리자 권한이 확장/서브 클래 싱되었습니다.Django Admin 사용자가 다른 Admin 사용자의 프로필 데이터를 변경하는 것을 방지하려면 어떻게합니까?
교사가 다른 교사의 프로필 데이터를보고 변경하는 것을 방지하고 교사가 자신의 기록/행만 변경할 수있는 방법은 무엇입니까? 미리 감사드립니다!
정확히 무엇을하려는 것인지 잘 모르겠지만 교사의 사용자 관리 기능이 기본 제공되는 사용자 관리 페이지가 약간 다른 경우라면 확장해야한다고 생각합니다. UserAdmin
을 입력하고 queryset
메서드를 재정의하십시오.
queryset
메서드에서 반환 사용하는
ModelAdmin
코드,
change_view
및
delete_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_permission
및 has_delete_permission
메서드를 재정 의하여합니다.
자세한 내용을 보려면 ModelAdmin
소스 코드를 확인하십시오 (contrib/admin/options.py
).
현재로서는 쉬운 방법이 없지만 Django 1.2에서는 object level permissions이 곧 제공 될 예정입니다. 관리자가 작동하려면 약간의 작업을해야하지만.
다행히도해야 할 일이 설명되어있는 Django Advent article이 있습니다.
아마도 이렇게하려면 빌드가되지 않았습니다.
는 permission docs 참조 : 은권한이없는 특정 객체 인스턴스 당, 전 세계적으로 객체의 유형에 따라 설정됩니다. 예를 들어 "Mary는 뉴스 기사를 바꿀 수 있습니다."라고 말할 수는 있지만 "Mary는 뉴스 기사를 변경할 수 있지만 자신이 만든 뉴스 만 변경할 수 있습니다"또는 "Mary는 특정 상태의 뉴스 기사 만 변경할 수 있습니다 , 발행일 또는 신분증. " 후자의 기능은 장고 개발자들이 현재 논의하고있는 것입니다.
그러나 분명히 object level permissions이 나타납니다.
+1 Thanks Clement! user_change_password()를 이해하려고합니다. 코드를 읽는 것이 좋습니다. – Viet