Cada archivo, carpeta y unidad compartida de Google Drive tiene recursos permissions
asociados. Cada recurso identifica el permiso para un type
específico (user
, group
, domain
, anyone
) y un role
(owner
, organizer
, fileOrganizer
, writer
, commenter
, reader
). Por ejemplo, un archivo puede tener un permiso que otorga a un usuario específico (type=user
) acceso de solo lectura (role=reader
), mientras que otro permiso otorga a los miembros de un grupo específico (type=group
) la capacidad de agregar comentarios a un archivo (role=commenter
).
Para obtener una lista completa de los roles y las operaciones permitidas por cada uno, consulta Roles y permisos.
Cómo funcionan los permisos
Las listas de permisos de una carpeta se propagan hacia abajo. Todos los archivos y las carpetas secundarios heredan los permisos de la carpeta superior. Cada vez que se cambian los permisos o la jerarquía, la propagación se produce de forma recursiva en todas las carpetas anidadas. Por ejemplo, si un archivo existe en una carpeta y esa carpeta se mueve dentro de otra, los permisos de la carpeta nueva se propagan al archivo. Si la carpeta nueva otorga al usuario del archivo un rol nuevo, como "escritor", se anula su rol anterior.
Por el contrario, si un archivo hereda role=writer
de una carpeta y se mueve a otra carpeta que proporciona un rol de "lector", el archivo ahora hereda role=reader
.
Los permisos heredados no se pueden quitar de un archivo o una carpeta en una unidad compartida. En su lugar, estos permisos se deben ajustar en el elemento superior directo o indirecto del que se heredaron. Los permisos heredados se pueden quitar de los elementos en "Mi unidad" o "Compartidos conmigo".
Por el contrario, los permisos heredados se pueden anular en un archivo o una carpeta de Mi unidad. Por lo tanto, si un archivo hereda role=writer
de una carpeta de Mi Drive, puedes establecer role=reader
en el archivo para reducir su nivel de permisos.
Comprende las capacidades de los archivos
En última instancia, el recurso permissions
no determina la capacidad del usuario actual para realizar acciones en un archivo o una carpeta.
En su lugar, el recurso files
contiene una colección de campos booleanos capabilities
que se usan para indicar si se puede realizar una acción en un archivo o una carpeta. La API de Google Drive establece estos campos según el recurso de permisos del usuario actual asociado con el archivo o la carpeta.
Por ejemplo, cuando Alex accede a tu app y trata de compartir un archivo, se verifica el rol de Alex para determinar si tiene permisos sobre el archivo. Si el rol permite compartir un archivo, los capabilities
relacionados con el archivo, como canShare
, se completan en relación con el rol. Si Alex quiere compartir el archivo, tu app verifica el capabilities
para asegurarse de que canShare
esté establecido en true
.
Para ver un ejemplo de cómo recuperar el archivo capabilities
, consulta Cómo obtener las capacidades de un archivo.
Obtén las capacidades de los archivos
Cuando tu app abre un archivo, debe verificar sus capacidades y renderizar la IU para reflejar los permisos del usuario actual. Por ejemplo, si el usuario no tiene la capacidad canComment
en el archivo, se debe inhabilitar la capacidad de comentar en la IU.
Para verificar las capacidades, llama al método get()
en el recurso files
con el parámetro de ruta de acceso fileId
y el parámetro fields
configurado en el campo capabilities
. Para obtener más información sobre cómo devolver campos con el parámetro fields
, consulta Cómo devolver campos específicos.
En el siguiente ejemplo de código, se muestra cómo verificar los permisos del usuario. La respuesta devuelve una lista de las capacidades que el usuario tiene en el archivo. Cada capacidad corresponde a una acción detallada que puede realizar un usuario. Algunos campos solo se completan para los elementos de unidades compartidas.
Solicitud
GET https://www.googleapis.com/drive/v3/files/FILE_ID
?fields=capabilities
Respuesta
{ "capabilities": { "canAcceptOwnership": false, "canAddChildren": false, "canAddMyDriveParent": false, "canChangeCopyRequiresWriterPermission": true, "canChangeItemDownloadRestriction": true, "canChangeSecurityUpdateEnabled": false, "canChangeViewersCanCopyContent": true, "canComment": true, "canCopy": true, "canDelete": true, "canDisableInheritedPermissions": false, "canDownload": true, "canEdit": true, "canEnableInheritedPermissions": true, "canListChildren": false, "canModifyContent": true, "canModifyContentRestriction": true, "canModifyEditorContentRestriction": true, "canModifyOwnerContentRestriction": true, "canModifyLabels": true, "canMoveChildrenWithinDrive": false, "canMoveItemIntoTeamDrive": true, "canMoveItemOutOfDrive": true, "canMoveItemWithinDrive": true, "canReadLabels": true, "canReadRevisions": true, "canRemoveChildren": false, "canRemoveContentRestriction": false, "canRemoveMyDriveParent": true, "canRename": true, "canShare": true, "canTrash": true, "canUntrash": true } }
Situaciones para compartir recursos de Drive
Existen cinco tipos diferentes de situaciones de uso compartido:
Para compartir un archivo en Mi unidad, el usuario debe tener
role=writer
orole=owner
.Si el valor booleano
writersCanShare
se establece enfalse
para el archivo, el usuario debe tenerrole=owner
.Si el usuario con
role=writer
tiene acceso temporal regido por una fecha y hora de vencimiento, no podrá compartir el archivo. Para obtener más información, consulta Cómo establecer una fecha de vencimiento para limitar el acceso a los archivos.
Para compartir una carpeta en Mi unidad, el usuario debe tener
role=writer
orole=owner
.Si el valor booleano
writersCanShare
se establece enfalse
para el archivo, el usuario debe tener el permiso más permisivorole=owner
.No se permite el acceso temporal (regido por una fecha y hora de vencimiento) en las carpetas de Mi unidad con
role=writer
. Para obtener más información, consulta Cómo establecer una fecha de vencimiento para limitar el acceso a los archivos.
Para compartir un archivo en una unidad compartida, el usuario debe tener
role=writer
,role=fileOrganizer
orole=organizer
.- El parámetro de configuración
writersCanShare
no se aplica a los elementos de las unidades compartidas. Se considera como si siempre estuviera establecido entrue
.
- El parámetro de configuración
Para compartir una carpeta en una unidad compartida, el usuario debe tener
role=organizer
.- Si la restricción
sharingFoldersRequiresOrganizerPermission
en una unidad compartida está configurada comofalse
, los usuarios conrole=fileOrganizer
pueden compartir carpetas en esa unidad compartida.
- Si la restricción
Para administrar la membresía de la unidad compartida, el usuario debe tener
role=organizer
. Solo los usuarios y los grupos pueden ser miembros de unidades compartidas.
Cómo crear un permiso
Los siguientes dos campos son necesarios cuando se crea un permiso:
type
: Eltype
identifica el alcance del permiso (user
,group
,domain
oanyone
). Un permiso contype=user
se aplica a un usuario específico, mientras que un permiso contype=domain
se aplica a todos los usuarios de un dominio específico.role
: El camporole
identifica las operaciones que puede realizar eltype
. Por ejemplo, un permiso contype=user
yrole=reader
otorga a un usuario específico acceso de solo lectura al archivo o la carpeta. O bien, un permiso contype=domain
yrole=commenter
permite que todos los usuarios del dominio agreguen comentarios a un archivo. Para obtener una lista completa de los roles y las operaciones permitidas por cada uno, consulta Roles y permisos.
Cuando creas un permiso en el que type=user
o type=group
, también debes proporcionar un emailAddress
para vincular el usuario o grupo específico al permiso.
Cuando creas un permiso en el que type=domain
, también debes proporcionar un domain
para vincular un dominio específico al permiso.
Para crear un permiso, sigue estos pasos:
- Usa el método
create()
con el parámetro de ruta de accesofileId
para el archivo o la carpeta asociados. - En el cuerpo de la solicitud, especifica los parámetros
type
yrole
. - Si es
type=user
otype=group
, proporciona unemailAddress
. Si estype=domain
, proporciona undomain
.
En el siguiente ejemplo de código, se muestra cómo crear un permiso. La respuesta devuelve una instancia de un recurso Permission
, incluido el permissionId
asignado.
Solicitud
POST https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions
{ "requests": [ { "type": "user", "role": "commenter", "emailAddress": "alex@altostrat.com" } ] }
Respuesta
{
"kind": "drive#permission",
"id": "PERMISSION_ID
",
"type": "user",
"role": "commenter"
}
Cómo usar los públicos objetivo
Los usuarios objetivo son grupos de personas, como departamentos o equipos, que puedes recomendar para que los usuarios compartan sus elementos con ellos. Puedes invitar a los usuarios a compartir elementos con un público más específico o limitado en lugar de toda la organización. Los usuarios objetivo pueden ayudarte a mejorar la seguridad y la privacidad de tus datos, y facilitar que los usuarios compartan contenido de forma adecuada. Para obtener más información, consulta Acerca de los públicos objetivo.
Para usar los públicos objetivo, sigue estos pasos:
En la Consola del administrador de Google, ve a Menú > Directorio > Públicos objetivo.
Para realizar esta tarea, debes acceder con una cuenta con privilegios de administrador avanzado.
En la lista de públicos objetivo, haz clic en el nombre del público objetivo. Para crear un público objetivo, consulta Crea un público objetivo.
Copia el ID único de la URL del público objetivo:
https://admin.google.com/ac/targetaudiences/ID
.Crea un permiso con
type=domain
y establece el campodomain
enID.audience.googledomains.com
.
Para ver cómo interactúan los usuarios con los públicos objetivo, consulta Experiencia del usuario para el uso compartido de vínculos.
Enumera todos los permisos
Usa el método list()
en el recurso permissions
para recuperar todos los permisos de un archivo, una carpeta o una unidad compartida.
En el siguiente ejemplo de código, se muestra cómo obtener todos los permisos. La respuesta devuelve una lista de permisos.
Solicitud
GET https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions
Respuesta
{
"kind": "drive#permissionList",
"permissions": [
{
"id": "PERMISSION_ID
",
"type": "user",
"kind": "drive#permission",
"role": "commenter"
}
]
}
Actualizar permisos
Para actualizar los permisos de un archivo o una carpeta, puedes cambiar el rol asignado. Para obtener más información sobre cómo encontrar la fuente del rol, consulta Cómo determinar la fuente del rol.
Llama al método
update()
en el recursopermissions
con el parámetro de ruta de accesopermissionId
establecido en el permiso que se cambiará y el parámetro de ruta de accesofileId
establecido en el archivo, la carpeta o la unidad compartida asociados. Para encontrar elpermissionId
, usa el métodolist()
en el recursopermissions
con el parámetro de rutafileId
.En la solicitud, identifica el nuevo
role
.
Puedes otorgar permisos en archivos o carpetas individuales de una unidad compartida, incluso si el usuario o el grupo ya son miembros. Por ejemplo, Alex tiene role=commenter
como parte de su membresía a una unidad compartida. Sin embargo, tu app puede otorgar acceso de role=writer
a Alex para un archivo en una unidad compartida. En este caso, como el nuevo rol es más permisivo que el rol otorgado a través de su membresía, el nuevo permiso se convierte en el rol efectivo para el archivo o la carpeta.
En el siguiente ejemplo de código, se muestra cómo cambiar los permisos de un archivo o una carpeta de comentarista a escritor. La respuesta devuelve una instancia de un recurso permissions
.
Solicitud
PATCH https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions/PERMISSION_ID
{ "requests": [ { "role": "writer" } ] }
Respuesta
{
"kind": "drive#permission",
"id": "PERMISSION_ID
",
"type": "user",
"role": "writer"
}
Determina la fuente del rol
Para cambiar el rol en un archivo o una carpeta, debes conocer la fuente del rol. En el caso de las unidades compartidas, la fuente de un rol puede basarse en la membresía a la unidad compartida, el rol en una carpeta o el rol en un archivo.
Para determinar la fuente del rol de una unidad compartida o de los elementos que contiene, llama al método get()
en el recurso permissions
con los parámetros de ruta fileId
y permissionId
, y el parámetro fields
establecido en el campo permissionDetails
.
Para encontrar el permissionId
, usa el método list()
en el recurso permissions
con el parámetro de ruta fileId
. Para recuperar el campo permissionDetails
en la solicitud list
, establece el parámetro fields
en permissions/permissionDetails
.
En este campo, se enumeran todos los permisos de archivo heredados y directos para el usuario, el grupo o el dominio.
En el siguiente ejemplo de código, se muestra cómo determinar la fuente del rol. La respuesta devuelve el permissionDetails
de un recurso permissions
. El campo inheritedFrom
proporciona el ID del elemento del que se hereda el permiso.
Solicitud
GET https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions/PERMISSION_ID
?fields=permissionDetails&supportsAllDrives=true
Respuesta
{
"permissionDetails": [
{
"permissionType": "member",
"role": "commenter",
"inheritedFrom": "INHERITED_FROM_ID
",
"inherited": true
},
{
"permissionType": "file",
"role": "writer",
"inherited": false
}
]
}
Actualiza varios permisos con solicitudes por lotes
Te recomendamos que uses solicitudes por lotes para modificar varios permisos.
A continuación, se muestra un ejemplo de cómo realizar una modificación de permisos por lotes con una biblioteca cliente.
Java
Python
Node.js
PHP
.NET
Cómo borrar un permiso
Para revocar el acceso a un archivo o una carpeta, llama al método delete()
en el recurso permissions
con los parámetros de ruta de acceso fileId
y permissionId
establecidos para borrar el permiso.
En el caso de los elementos de "Mi unidad", es posible borrar un permiso heredado. Borrar un permiso heredado revoca el acceso al elemento y a los elementos secundarios, si los hay.
En el caso de los elementos de una unidad compartida, no se pueden revocar los permisos heredados. En su lugar, actualiza o borra el permiso en el archivo o la carpeta principal.
El método delete()
también se usa para borrar los permisos aplicados directamente a un archivo o una carpeta de la unidad compartida.
En la siguiente muestra de código, se muestra cómo revocar el acceso borrando un objeto permissionId
. Si se ejecuta correctamente, el cuerpo de la respuesta está vacío. Para confirmar que se quitó el permiso, usa el método list()
en el recurso permissions
con el parámetro de ruta de acceso fileId
.
Solicitud
DELETE https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions/PERMISSION_ID
Cómo establecer una fecha de vencimiento para limitar el acceso a un archivo
Cuando trabajas con personas en un proyecto sensible, es posible que quieras restringir su acceso a ciertos archivos en Drive después de un período. En el caso de los archivos de Mi unidad, puedes establecer una fecha de vencimiento para limitar o quitar el acceso a ese archivo.
Para establecer la fecha de vencimiento, sigue estos pasos:
Usa el método
create()
en el recursopermissions
y establece el campoexpirationTime
(junto con los demás campos obligatorios). Para obtener más información, consulta Crea un permiso.Usa el método
update()
en el recursopermissions
y establece el campoexpirationTime
(junto con los demás campos obligatorios). Para obtener más información, consulta Actualiza permisos.
El campo expirationTime
indica cuándo vence el permiso con fecha y hora de RFC 3339. Los tiempos de vencimiento tienen las siguientes restricciones:
- Solo se pueden configurar en los permisos de usuarios y grupos.
- La hora debe ser posterior a la actual.
- La fecha no puede ser posterior a un año a partir de la fecha actual.
Para obtener más información sobre la fecha de vencimiento, consulta los siguientes artículos:
- Cómo establecer una fecha de vencimiento para acceder a un archivo
- Cómo agregar una fecha de vencimiento
Temas relacionados
- Administra las propuestas de acceso pendientes
- Administra carpetas con acceso limitado y amplio
- Cómo transferir la propiedad de un archivo
- Protege el contenido de los archivos
- Cómo acceder a archivos de unidades compartidas con vínculos usando claves de recursos
- Funciones y permisos