En el blog anterior de la serie Sync Gateway, exploramos Cómo autenticar y autorizar usuarios en una aplicación mediante algunas de las funciones de Sync Gateway. Continuando con esta serie, ahora exploraremos cómo validar los tipos de documento en Pasarela de sincronización para determinar su accesibilidad desde el lado del cliente móvil con un usuario en particular. Esto nos llevará a la discusión del Canal sobre cómo Couchbase Mobile hace la seguridad del lado de la lectura en el próximo blog de nuestra serie. Para la seguridad del lado de la escritura, exploraremos los métodos clave en la Función de Sincronización que permitirían que documentos particulares provenientes de usuarios conocidos sean escritos en la base de datos backend.
Función de sincronización
Imaginemos que tenemos un documento o muchos documentos en nuestra base de datos por ejemplo donde tenemos una clave de tipo a la que haremos referencia en nuestro código de validación. El corazón de Sync Gateway es la lógica de implementación de la función de sincronización y a continuación vemos cómo se puede verificar un tipo de documento para los controles de accesibilidad para los usuarios en una aplicación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
"sincronizar" : ' función(doc, oldDoc) { si (doc.tipo == "amigos") { //Procesar nuevo documento de amigos requerirUsuario(doc.propietario); //El propietario de los amigos acceda a(doc.amigos, "artículos-"+doc.propietario); canal("privado-"+doc.propietario); acceda a(doc.propietario, "privado-"+doc.propietario) } si no si (doc.tipo == "vehículos"){ requerirUsuario(doc.propietario); //El propietario del documento del vehículo acceda a(doc.vehículos, "artículos-"+doc.propietario); canal("privado-"+doc.propietario); acceda a(doc.propietario, "privado-"+doc.propietario) } si no{ requerirUsuario(doc.propietario) canal("artículos-"+doc.propietario); } }' |
Con el campo "tipo" en los documentos, podemos diferenciar por valores específicos de lo que representa el documento. Si un tipo de documento representa "escuelas", "vehículos" o "amigos", desde la función de sincronización podemos añadir una sentencia switch para capturar cómo vamos a permitir el procesamiento de diferentes tipos de documentos de diferentes maneras desde la función de sincronización. Lo primero que hacemos es comprobar si el tipo de documento es "amigos" y si la propiedad del propietario del documento coincide con el ID de usuario autenticado actual mediante la sentencia 'requerirUsuario()'. Si la propiedad owner coincide con el usuario autenticado actual, entonces daremos acceso a un documento a todos los amigos a través del canal 'items-doc.owner'. Esto significa básicamente que nadie más verá la lista de amigos que ha sido invitada por el usuario, ya que es privada sólo para el propio usuario.
La cláusula "else" es donde si no se trata de un documento de amigos o vehículos, entonces este será un documento de artículo de la escuela y de nuevo validamos que la propiedad del propietario coincide con el ID de usuario autenticado actual. Como antes, añadimos los ítems al canal 'ítems-' para la propiedad del propietario del ítem y le damos a ese usuario acceso a ese canal.
1 2 3 |
si no{ tirar({prohibido: "No válido documento tipo"}); } |
En lugar del método 'requireUser()', lo sustituiremos por el método método 'requireAccess("items-"+doc.owner)' donde ahora básicamente si quieres escribir un nuevo ítem en una lista, tienes que tener acceso al canal de ítems para el usuario en particular para el que quieres añadir el ítem.
1 |