En Athento es posible otorgar permisos de forma dinámica en base a valores de metadatos.
Por ejemplo, supongamos que tenemos un campo llamado "Categoría" y un campo llamado "Subcategoría".
Supongamos que queremos que ciertos usuarios tengan permiso de lectura dependiendo del valor asignado en la "Categoría" o "Subcategoría".
Para ello debemos crear una operación personalizada que llamaremos "Asigna permisos por categoría" (asigna_permiso_grupos_por_categoria.py). Esta operación tendrá la siguiente lógica:
- Obtiene o crea un grupo con el nombre del metadato categoría
- Obtiene o crea un grupo con el nombre del metadato subcategoría
- Obtiene o crea un grupo con el nombre de la categoría y subcategoría concatenados con “_”
- Asigna permisos de lectura para los tres grupos anteriores en el documento
- Obtiene o crea el grupo con el nombre del espacio terminado en “_read”. Este grupo es necesario para que los usuarios tengan permiso sobre la serie, aunque luego no tengan permisos sobre todos los documentos.
- Quita el permiso de lectura sobre el documento para el grupo anterior.
La implementación tendría el siguiente aspecto:
def run(uuid=None, **params):
from file.utils import get_document
fil = get_document(uuid, **params)
categoria = fil.gmv('metadata.categoria')
subcategoria = fil.gmv('metadata.subcategoria')
categoria_subcategoria = categoria + '_' + subcategoria
team = fil.serie.team
_, _, group1 = GroupASE.create_group(categoria, team, keep_name=True, label=categoria)
_, _, group2 = GroupASE.create_group(subcategoria, team, keep_name=True, label=subcategoria)
_, _, group12 = GroupASE.create_group(categoria_subcategoria, team, keep_name=True, label=categoria_subcategoria)
# Ahora se asigna el permiso según el valor de cada metadato
fil.add_permission('read_file', group1.group)
fil.add_permission('read_file', group2.group)
fil.add_permission('read_file', group12.group)
# Este es el grupo general para que el usuario pueda ver el espacio en su
# listado de espacios
group_serie_name = fil.serie.name + '_read'
_, _, group_serie = GroupASE.create_group(group_serie_name, team, keep_name=True, label=group_serie_name)
fil.remove_permission('read_file', group_serie.group)
return {'msg_type': 'success', 'msg': 'Permisos asignados'}
La operación debe activarse en el espacio en el que vamos a cargar los documentos, en la fase “post load” y en el espacio activar la opción “Run postload operations” para que se ejecute la asignación de permisos al crear un documento.
Una vez instalada la operación, creamos documentos en los que se irán asignando los permisos.
Adicionalmente, en la pestaña "Groups" de la pantalla de gestión de usuarios, veremos que se van creando grupos con los nombres de las categorías y subcategorías de los metadatos. Bastará entonces con añadir usuarios a dichos grupos para que vean los documentos asociados a dichas categorías y subcategorías.
Consulta vía API
En este punto, recordamos que existe el parámetro “asUser” para buscar documentos vía API.
Para los permisos asignados con el mecanismo anterior, podemos usar este parámetro y podremos consultar qué documentos son visibles para dicho usuario, donde se aplicará la lógica de permisos por categoría y subcategoría.
En definitiva, el parámetro "asUser" puede usarse para buscar documentos vía API en nombre de un usuario concreto y, este método de búsqueda, funciona también para los permisos asignados de forma dinámica.
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.