Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

149
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!