기본 사용자 항목을 이해합니다. 인증, 로그인, 계정 생성 등을 알고 있습니다.하지만 이제 그룹과 권한에 대해 작업하고 싶습니다.
장고 그룹 / 권한에 대한 문서는 어디에 있습니까? 이것이 아닙니다 : http://docs.djangoproject.com/en/dev/topics/auth/
기본 사용자 항목을 이해합니다. 인증, 로그인, 계정 생성 등을 알고 있습니다.하지만 이제 그룹과 권한에 대해 작업하고 싶습니다.
장고 그룹 / 권한에 대한 문서는 어디에 있습니까? 이것이 아닙니다 : http://docs.djangoproject.com/en/dev/topics/auth/
답변:
첫 번째 질문은 어떤 권한이 필요하고 어떤 종류의 권한이 필요한지입니다. 어떤 종류로든 모델 수준 또는 개체 수준을 원하십니까? 차이점을 명확히하기 위해 자동차 모델이 있다고 가정합니다. 모든 차량에 대한 권한을 부여하려면 모델 수준이 적합하지만 차량별로 권한을 부여하려면 객체 수준이 필요합니다. 둘 다 필요할 수 있으며 앞으로 보게 될 문제는 아닙니다.
모델 권한의 경우 Django가 이러한 작업을 처리합니다. 각 모델에 대해 Django는 'appname.permissionname_modelname'형식으로 권한을 생성합니다. Car 모델에 'drivers'라는 앱이있는 경우 하나의 권한은 'drivers.delete_car'입니다. Django가 자동으로 생성하는 권한은 생성, 변경 및 삭제입니다. 이상한 이유로 CRUD의 읽기 권한을 포함하지 않기로 결정한 경우 직접 수행해야합니다. Django는 어떤 이유로 CRUD의 '업데이트'를 '변경'으로 변경하기로 결정했습니다. 모델에 더 많은 권한을 추가하려면 (예 : 읽기 권한) Meta 클래스를 사용합니다.
class Car( models.Model ):
# model stuff here
class Meta:
permissions = (
( "read_car", "Can read Car" ),
)
권한은 튜플 집합이며, 튜플 항목은 위에서 설명한 권한과 해당 권한에 대한 설명입니다. permname_modelname 규칙을 따를 필요는 없지만 저는 보통 그것을 고수합니다.
마지막으로 권한을 확인하려면 has_perm을 사용할 수 있습니다.
obj.has_perm( 'drivers.read_car' )
여기서 obj는 사용자 또는 그룹 인스턴스입니다. 이것에 대한 함수를 작성하는 것이 더 간단하다고 생각합니다.
def has_model_permissions( entity, model, perms, app ):
for p in perms:
if not entity.has_perm( "%s.%s_%s" % ( app, p, model.__name__ ) ):
return False
return True
엔티티는 (그룹 또는 사용자)에 대한 권한을 확인할 개체이고, 모델은 모델의 인스턴스이고, perms는 확인할 문자열 (예 : [ 'read', 'change'])의 권한 목록이고, app은 문자열로 된 애플리케이션 이름. 위의 has_perm과 동일한 검사를 수행하려면 다음과 같이 호출합니다.
result = has_model_permissions( myuser, mycar, ['read'], 'drivers' )
객체 또는 행 권한을 사용해야하는 경우 (동일한 의미 임) Django는 그 자체로 도움을 줄 수 없습니다. 좋은 점은 모델 및 개체 권한을 나란히 사용할 수 있다는 것입니다. 객체 권한을 원한다면 직접 작성하거나 ( 1.2 이상을 사용하는 경우) 다른 사람이 작성한 프로젝트를 찾아야합니다. 제가 좋아하는 것은 washingtontimes의 django-objectpermissions 입니다.