Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

146
Vistas
¿Cómo podría modelar la base de datos Parse para el acceso seguro a objetos compartidos entre múltiples usuarios?

Estoy tratando de modelar mi base de datos Parse para el acceso a ACL con Roles. Los roles contendrán muchos usuarios para que los usuarios puedan tener grupos con los que compartir datos. También estoy bloqueando todos los CLP al 100 %. Solo el usuario tendrá acceso público a buscar () y escribir () para iniciar sesión y crear.

Todavía no he visto una situación exacta en la que esto se haya explicado en absoluto. He visto muchos ejemplos de relaciones, punteros y acceso a roles de ACL, pero ninguno para bases de datos compartidas y seguras. Hasta ahora, no puedo entender ni extrapolar cómo puedo tener CLP bloqueados (sin buscar ()) y acceso a ACL basado en roles. ¿Pueden los punteros o las relaciones habilitar esto de alguna manera?

Los colores de obtención actuales devuelven todos los objetos con clave maestra (obviamente, lo contrario de lo que quiero) o acceso denegado.

 Parse.Cloud.define("ccGetColors", async (request) => { let currentUser = request.user; let query = new Parse.Query("Color"); // query.equalTo("user", currentUser); let results = await query.find({ useMasterKey: true }); if(results.length === 0) throw new Error('No results found!'); let steralizedResults = []; for (let i = 0; i < results.length; i++) { let object = results[i]; let color = object.get("color"); steralizedResults.push(color); } return steralizedResults; });

Agregar usuario a roles

 Parse.Cloud.define("ccAddUserToRole", async function(request) { let user = request.user; // Get group admin ID let userQuery = new Parse.Query("AddUser"); let results = await userQuery.find({ useMasterKey: true }); let resultObject = results[0]; let groupAdminObject = resultObject.get("groupAdmin"); let groupAdminID = groupAdminObject.id; // Concatonate group name let groupName = "Group_" + groupAdminID; // Query for group role with group ID let roleQuery = new Parse.Query(Parse.Role); roleQuery.contains("name", groupName); roleQuery.first({ useMasterKey: true }).then(function(role) { console.log(role); role.relation("users").add(user); role.save(null, { useMasterKey: true }); }); });
  1. Actualmente, el rol apunta a los usuarios, esto funciona bien al agregar usuarios como se indicó anteriormente.
  2. Mi clase de color tiene acceso a ACL basado en roles y funciona bien para un solo usuario.
  3. Todos los CPL están bloqueados actualmente y quiero que siga así.

¿Puede alguien ayudarme a señalarme en la dirección correcta? O apuntar o relacionarme en la dirección correcta;)

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

En la forma en que funciona la seguridad de Parse Server, para que un determinado usuario tenga acceso a un determinado objeto, deben pasar AMBOS, la regla de regla ACL para el objeto Y la regla CLP para la clase del objeto. Significa que, si elimina todos los permisos en CLP de una determinada clase, solo se podrá acceder a todos los objetos de esa clase a través de Master Key, que se parece al comportamiento que tiene.

Dado que tiene reglas de ACL para cada uno de los objetos, configuraría el CLP para permitir solo usuarios autenticados, y debería lograr lo que necesita de esta manera.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Conseguí que esto sucediera exactamente como pretendía, aunque de una manera un poco indirecta sin usar directamente relaciones o punteros. Estoy seguro de que hay una manera aún más fácil de hacer esto, sin embargo, no lo sé.

En mi proyecto de demostración simple, tengo una clase de color que representa datos simples, la clase incluye un color y un propietario de grupo. La propiedad del propietario del grupo es el nombre del rol que se guarda con cada objeto nuevo. En la consulta de todos los colores, verifico el rol del usuario y hago referencia a esto con los colores a los que el usuario tiene acceso. De esta forma, solo se devuelven los objetos autorizados en función del rol del usuario.

En mi proyecto, todos los CLP están bloqueados al 100%, excepto el inicio de sesión y el registro, e incluso estos estoy buscando bloquearlos para llamar a través del código de la nube. Quiero tanto control del servidor como sea posible y tanto código oculto como sea posible.

Si alguien tiene una entrada o una mejor manera, por favor comparta :)

 Parse.Cloud.define("ccSaveColor", async (request) => { let colorString = request.params.color; const query = await new Parse.Query(Parse.Role).equalTo('users', request.user).find({ useMasterKey: true }) let role = await query[0]; var groupACL = new Parse.ACL(); groupACL.setRoleWriteAccess(role, true); groupACL.setRoleReadAccess(role, true); let Color = Parse.Object.extend("Color"); let color = new Color(); color.set("groupOwner", role.get("name")); color.set("color", colorString); color.setACL(groupACL); return await color.save(null, { useMasterKey: true }); }); Parse.Cloud.define("ccGetColors", async (request) => { const roleQuery = await new Parse.Query(Parse.Role).equalTo('users', request.user).find({ useMasterKey: true }) let role = await roleQuery[0]; let query = new Parse.Query("Color"); query.equalTo("groupOwner", role.get("name")); let results = await query.find({ useMasterKey: true }); if(results.length === 0) throw new Error('No results found!'); let steralizedResults = []; for (let i = 0; i < results.length; i++) { let object = results[i]; let color = object.get("color"); steralizedResults.push(color); } return steralizedResults; });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda