¿Cómo agrego roles a los usuarios en la base de datos de usuarios de Cloudant? (_users) No he podido resolver esto usando Google o Cloudant Docs. Veo alguna mención de un Cloudant _user db y no he encontrado cómo usarlo.
He construido una API con nodejs y express. con
const { CloudantV1 } = require('@ibm-cloud/cloudant'); const { BasicAuthenticator } = require('ibm-cloud-sdk-core');Puedo crear ApiKeys y asignar funciones con service.putCloudantSecurityConfiguration().
resultado de service.getSecurity() a continuación:
cloudant: { 'apikey-01beebbe10ae46ad9e86cc16a2937939': [ '_replicator', '_writer', '_reader' ], 'apikey-3044abd26f324792a8be5809a5521400': [ '_writer', '_reader' ], 'apikey-8d98aa26f1d246f6b736f313bd45d630': [ '_writer', '_reader' ], 'apikey-231cdadcf38945e9ab48125adddc0fdb': [], 'apikey-7ec3ebdd9c5b4aa691685fae251a255d': [ '_writer', '_reader' ], 'apikey-061e3a0ae05d486583dda500ee6685f6': [ '_writer', '_reader' ], 'apikey-0324472243bd4c0da6ea6e9022e102c8': [ '_writer', '_reader' ]}
Cuando miro el service.getSessionInformation(); resultado, veo:
"result": { "userCtx": { "roles": [], "name": "apikey-01beebbe10ae46ad9e86cc16a2937939" }, "ok": true, "info": { "authentication_handlers": [ "iam", "cookie", "default", "local" ], "authenticated": "default", "authentication_db": "bm-cc-us-south-18/users" } }Matriz de roles vacía!
Quiero usar estas nuevas credenciales de apikey con Pouchdb como en:
localDB.replicate.to(https://<apikey>:<pass>@<cloudantURL>/<dbname> ).on('complete', function () { // yay, we're done! }).on('error', function (err) { // boo, something went wrong! });me sale error:
mensaje: "No está autorizado para acceder a esta base de datos".
Gracias por tu ayuda.
Cloudant, como ha descubierto, le permite crear pares de clave de API/contraseña que tienen acceso a una o más bases de datos. Puede establecer los permisos para cada clave de API en cada base de datos, como ya lo ha hecho.
El punto final GET /session (al que está accediendo con la función JavaScript service.getSessionInformation() ) no devuelve los permisos de la clave API en la matriz de roles , pero no se desanime: su clave API tiene los permisos que definió en el primer paso, por lo que debería poder leer/escribir/consultar datos normalmente con esa clave API.
Tenga en cuenta que este mecanismo de autenticación es independiente de la base de datos _users de estilo CouchDB.
por ejemplo, con PouchDB
const PouchDB = require('pouchdb') const db = new PouchDB('test') const username = 'apikey-somevalue' const password = 'somepassword' const hostname = 'myhost.cloudant.com' const dbname = 'pouch' const remoteDB = `https://${username}:${password}@${hostname}/${dbname}` db.sync(remoteDB).on('complete', async function () { console.log('done') const docs = await db.allDocs() console.log(docs) }).on('error', function (err) { console.error(err) });La respuesta de Glenn es buena, para mi caso hay objetos de usuario adicionales. Esto fue después de un mes de ir y venir con Cloudant Help. Necesitaba eliminar los objetos de usuario adicionales en la respuesta de "service.getSecurity({"
delete response.result.cloudant['nobody']; delete response.result['members'];El único objeto que necesito es el "cloudant"