사용자가 내 드라이브 폴더를 소유하고 있습니다. 폴더에 여러 파일에 액세스할 수 있는 여러 사용자가 포함되어 있을 수 있습니다. 이러한 제한적인 액세스 모델은 서로 다른 사용자가 동일한 폴더 내에서 서로 다른 항목 목록을 볼 수 있음을 의미합니다. 상위 내 드라이브 폴더에 액세스할 수 있지만 해당 폴더 내 항목에는 액세스할 수 없는 사용자는 '액세스가 제한된 사용자'입니다. 이로 인해 계층 구조 내에서 액세스 권한이 있는 사용자를 파악하기가 어렵습니다.
반대로 공유 드라이브 파일은 공유 드라이브에서 소유합니다. 공유 드라이브는 확장된 모델을 사용하므로 모든 사용자에게 동일한 폴더에 동일한 항목 목록이 표시됩니다.
액세스가 제한된 폴더를 도입하면 공유 드라이브에서 내 드라이브로 확장된 액세스 모델을 복제할 수 있습니다. 이번 변경사항으로 인해 액세스가 제한된 폴더는 내 드라이브와 공유 드라이브 모두에서 특정 하위 폴더에 대한 액세스를 제한할 수 있는 유일한 예외입니다.
이 가이드에서는 Google Drive에서 액세스가 제한된 폴더와 액세스가 확장된 폴더를 관리하는 방법을 설명합니다.
액세스가 제한된 폴더 정보
액세스가 제한된 폴더를 사용하면 폴더를 특정 사용자로 제한할 수 있습니다. 폴더 권한에 직접 추가한 사용자만 폴더를 열고 콘텐츠에 액세스할 수 있습니다. 상위 폴더의 액세스를 통해 공유 내 드라이브 폴더 또는 공유 드라이브 폴더에 대한 상속된 액세스 권한이 있는 사용자는 Drive에서 제한된 폴더를 볼 수 있지만 열 수는 없습니다. 이 기능을 사용하면 내 드라이브와 공유 드라이브의 항목 공유 동작을 더 잘 조정할 수 있으므로 민감한 콘텐츠가 포함된 폴더를 더 광범위하게 공유된 콘텐츠와 함께 정리할 수 있습니다.
액세스가 제한된 폴더는 내 드라이브와 공유 드라이브에서 모두 사용할 수 있습니다. 내 드라이브의 owner
역할과 공유 드라이브의 organizer
역할은 언제든지 액세스가 제한된 폴더에 액세스할 수 있습니다. 폴더 사용자 목록을 수정하는 데는 특별한 권한이 필요하지 않습니다. 폴더를 공유할 수 있는 역할은 구성원 목록을 업데이트할 수 있습니다. 역할 및 권한에 대한 자세한 내용은 역할 및 권한 및 공유 드라이브 개요를 참고하세요.
폴더는 파일의 한 유형이지만 파일에는 제한된 액세스를 사용할 수 없습니다.
폴더에 제한된 액세스 설정하기
폴더에 대한 직접 액세스 권한이 있는 사용자는 액세스가 제한된 폴더에 액세스할 수 있지만, 내 드라이브의 owner
역할과 공유 드라이브의 organizer
역할만 액세스 제한을 사용 설정하거나 사용 중지할 수 있습니다.
또한 내 드라이브에서 writer
역할을 가진 사용자가 files
리소스의 writersCanShare
불리언 필드를 true
로 설정한 경우 이 기능을 사용 설정하거나 중지할 수도 있습니다.
폴더에 대한 액세스를 제한하려면 files
리소스의 불리언 inheritedPermissionsDisabled
필드를 true
로 설정합니다. true
인 경우 owner
역할, organizer
역할, 직접 폴더 액세스 권한이 있는 사용자만 액세스할 수 있습니다.
상속된 권한을 다시 사용 설정하려면 inheritedPermissionsDisabled
를 false
로 설정합니다.
폴더에 대한 액세스를 제한할 권한 확인
폴더에 대한 액세스를 제한할 수 있는지 확인하려면 files
리소스의 capabilities.canDisableInheritedPermissions
및 capabilities.canEnableInheritedPermissions
필드의 불리언 값을 검사합니다. 이 설정은 inheritedPermissionsDisabled
필드를 통해 폴더에 대한 액세스를 제한할 권한이 있는지 확인합니다.
capabilities
에 관한 자세한 내용은 파일 기능 이해하기를 참고하세요.
액세스가 제한된 폴더의 하위 요소 나열
폴더의 하위 요소를 나열할 수 있는지 확인하려면 capabilities.canListChildren
불리언 필드를 사용합니다.
항목이 폴더가 아니거나 inheritedPermissionsDisabled
를 false
로 설정하여 요청자의 폴더 콘텐츠 액세스 권한이 삭제된 경우 반환되는 값은 항상 false
입니다.
폴더 콘텐츠에 대한 액세스 권한이 삭제된 경우에도 files.get()
및 files.list()
메서드를 사용하여 폴더 metadata에 계속 액세스할 수 있습니다. 액세스가 제한되었는지 확인하려면 응답 본문에서 항목이 MIME 유형이 application/vnd.google-apps.folder
이고 capabilities.canListChildren
필드가 false로 설정된 폴더인지 확인합니다. 이러한 폴더의 하위 요소를 나열하려고 하면 결과가 항상 비어 있습니다.
액세스가 제한된 메타데이터가 있는 폴더에 액세스
액세스가 제한된 폴더의 경우 폴더 콘텐츠에 액세스할 수 없더라도 폴더 metadata를 볼 수 있습니다.
permissions
리소스를 사용하여 사용자의 액세스 권한을 확인하는 경우 메타데이터에 대한 액세스 권한만 부여하는 내 드라이브 및 공유 드라이브 폴더 모두 응답 본문에 inheritedPermissionsDisabled=true
및 view=metadata
값을 포함합니다. 역할은 항상 reader
로 설정됩니다. view
필드는 view
에 속한 권한에 대해서만 채워집니다. 자세한 내용은 뷰를 참고하세요.
permissionDetails
필드의 모든 항목에는 inherited
필드가 true
로 설정되어 권한이 상속되었으며 폴더 콘텐츠에 대한 직접 액세스 권한이 부여되지 않았음을 나타냅니다.
폴더 콘텐츠와 메타데이터에 대한 액세스 권한을 모두 부여하려면 inheritedPermissionsDisabled
필드를 false
로 설정하거나 역할을 reader
이상으로 업데이트합니다.
마지막으로 폴더 (inheritedPermissionsDisabled=true
)에서 상속을 사용 중지하여 권한을 먼저 제한한 다음 권한을 폴더에 직접 다시 추가한 경우 응답 본문의 값은 view
필드가 설정되지 않은 inheritedPermissionsDisabled=true
이 됩니다. 폴더가 공유 드라이브에 있는 경우 permissionDetails
목록에 권한이 상속되지 않았음을 나타내기 위해 inherited
필드가 false
로 설정된 항목이 있습니다. 이 권한은 다른 권한과 마찬가지로 폴더 콘텐츠와 메타데이터에 대한 액세스 권한을 부여합니다.
액세스가 제한된 폴더 삭제
files
리소스에서 files.delete()
메서드를 사용하여 액세스가 제한된 폴더를 삭제할 수 있습니다.
내 드라이브에서는 항목 소유자만 폴더 계층 구조를 삭제할 수 있습니다. 사용자가 액세스가 제한되고 다른 사용자가 소유한 폴더가 있는 계층 구조를 삭제하면 해당 폴더는 소유자의 내 드라이브로 이동합니다.
사용자에게 owner
역할이 있는 경우 전체 계층 구조가 삭제됩니다.
공유 드라이브에서 organizer
역할은 액세스가 제한된 폴더가 포함되어 있더라도 계층 구조를 삭제할 수 있습니다. fileOrganizer
역할이 액세스가 제한된 폴더가 포함된 계층 구조를 삭제하는 경우 결과는 액세스가 제한된 폴더에 fileOrganizer
로 다시 추가되었는지에 따라 다릅니다. 삭제된 경우 전체 계층 구조가 삭제됩니다. 그렇지 않으면 액세스가 제한된 폴더가 공유 드라이브의 루트 폴더로 이동합니다.
확장 액세스 정보
액세스가 제한된 폴더를 도입하면 공유 드라이브에서 내 드라이브로 확장된 액세스 모델을 확대할 수 있습니다. 액세스 모델이 출시되면 폴더에 대한 액세스 권한이 있으면 해당 폴더 계층 구조의 모든 항목에 대해 동일한 수준의 액세스 권한이 있는 것입니다. 액세스가 제한된 폴더는 내 드라이브와 공유 드라이브 모두에서 특정 하위 폴더에 대한 액세스를 제한할 수 있는 유일한 예외입니다. 또한 폴더의 액세스가 제한되지 않는 한 상위 폴더에서 상속된 액세스 권한을 더 이상 삭제할 수 없습니다. 이렇게 하면 Drive API가 오류 응답을 반환합니다. 계층 구조 내에서 더 세분화된 액세스 제어를 정의하려면 폴더에 제한된 액세스를 설정하면 됩니다.
확장된 액세스에 적응
개발자가 확장된 액세스를 더 쉽게 적응할 수 있도록 Google Drive API가 다음과 같이 여러 가지로 개선되었습니다.
이제
permissions
리소스의permissionDetails[]
필드가 내 드라이브의 항목에 채워집니다. 이전에는 필드가 설정 해제되거나 적절한 경우teamDrivePermissionDetails
필드에서 복제되었습니다. 내 드라이브의permissionType
및inherited
필드만 채워집니다.permissionDetails[].inherited
필드는 권한이 항목의 상위 요소에서 상속되는지를 나타냅니다. 이를 통해 특정 역할 (예:reader
)이 상위 요소에서 상속되었는지, 상위 역할 (예:writer
)이 항목에 직접 부여되었는지 감지할 수 있습니다.항목의 권한을 볼 때
permissionDetails[]
필드에 여러 항목이 포함될 수 있습니다. 있는 경우 해당 범위의 항목에 직접 권한 항목이 하나 있고 그다음에는 항목의 상속된 권한 또는 구성원 권한 항목이 있습니다.개발자는 향후 필수 시행 전에 내 드라이브에서 확장된 액세스 API 동작을 선택할 수 있습니다. 향후 확장 액세스 권한이 변경되어도 앱에 영향을 미치지 않도록
enforceExpansiveAccess
요청 매개변수를true
로 설정할 수 있습니다.지금 선택하면 API가 공유 드라이브의 항목에 이미 적용된 것처럼 내 드라이브의 항목에도 동일하게 적용됩니다. 예를 들어 상속된 역할보다 낮은 수준으로 액세스를 제한하려고 하면
permissions.update()
를 호출할 때 실패합니다. 마찬가지로 권한이 상속되면permissions.delete()
호출이 실패합니다.
제한된 액세스 감지 및 방지
앱에서 permissions.update()
또는 permissions.delete()
메서드를 사용할 때 내 드라이브 폴더에 제한된 액세스 권한 (사용자가 상위 내 드라이브 폴더에 액세스할 수 있지만 해당 폴더 내 파일에는 액세스할 수 없음)을 생성할 수 있습니다.
이러한 메서드를 사용할 때는 permissions
리소스의 필드를 검토하여 요청으로 인해 제한된 액세스가 생성될 수 있는 위치를 확인하고 이러한 요청을 보내지 않을 수 있습니다. 이 상황을 감지하려면 요청에서 enforceExpansiveAccess
필드를 사용하세요.
또한 앱에서 이미 폴더에 제한된 액세스를 만든 경우 다음 단계를 따르세요.
폴더 계층 구조를 탐색하여 제한된 액세스를 삭제합니다. 대신 제한된 폴더 액세스를 설정해야 합니다.
공유를 해제하려는 항목이 파일인 경우 중간 폴더를 만들고 액세스를 제한한 후 새 폴더 내에 파일을 이동할 수 있습니다.
제한된 액세스 폴더를 사용하고 싶지 않지만 일부 액세스 권한을 삭제해야 하는 경우 파일을 비공개 폴더 (예: 내 드라이브 루트 폴더)로 이동하면 됩니다. 그런 다음 사용자가 계속 사용할 수 있도록 항목의 원래 위치에 대한 바로가기를 만들 수 있습니다.