Permisos para subprocesos y mensajes

Ya terminamos con las reglas para todas las tablas base (users, workspace y channel). La parte principal de Slack es que los usuarios envíen y reciban mensajes en el canal o a otros usuarios. Veamos cómo se aplica eso en las reglas de control de acceso.

Empecemos con las tablas channel_thread y channel_thread_message.

Seleccione el permiso

Necesitamos hacer una lista de quién puede acceder a un mensaje publicado en cualquier canal. El requisito es como:

  • Cualquiera que sea un miembro de un canal debería poder acceder a todos los hilos del canal.

Selección del nivel de fila

La expresión para channel_thread se traduce aproximadamente como lo siguiente:

{
"channel": {
"channel_members": {
"user_id": {
"_eq": "X-Hasura-User-Id"
}
}
}
}

La expresión difiere un poco para channel_thread_message ya que tiene un nivel más de anidamiento.

{
"channel_thread": {
"channel": {
"channel_members": {
"user_id": {
"_eq": "X-Hasura-User-Id"
}
}
}
}
}

Selección del nivel de columna

Después de filtrar las filas a las que un usuario debería acceder, necesitamos filtrar qué campos se les permite leer. Como no hay datos sensibles que se necesiten restringir solo a cierto tipo de usuario, damos permiso para seleccionar TODAS las columnas.

Terminamos con el acceso de lectura. Pasemos al acceso de escritura que permite a un usuario crear, actualizar o eliminar un canal.

Insertar el permiso

Cualquier usuario autenticado que sea parte de un espacio de trabajo puede publicar mensajes en los canales del espacio de trabajo. Se traduce en la misma expresión que se muestra arriba para la tabla channel_thread.

Permiso de actualización

Los usuarios no pueden actualizar channel_thread. Entonces, ¿quién puede actualizar los mensajes existentes en la tabla channel_thread_message?

  • Cualquier usuario autenticado puede actualizar su propio mensaje publicado en cualquier canal.

Actualización del nivel de fila

La condición anterior se traduce en la siguiente expresión:

{
"user_id": {
"_eq": "X-Hasura-User-Id"
}
}

Actualización del nivel de columna

El usuario solo puede actualizar la columna message en la tabla channel_thread_message.

Permiso de eliminación

El usuario que creó el mensaje puede eliminar su propio mensaje. Se traduce en la misma expresión que definimos para la operación de actualización.

Una vez más, como en los pasos anteriores, se puede aplicar la eliminación de CASCADA para eliminar todos los datos pendientes y dependientes.

Did you find this page helpful?
Start with GraphQL on Hasura for Free
  • ArrowBuild apps and APIs 10x faster
  • ArrowBuilt-in authorization and caching
  • Arrow8x more performant than hand-rolled APIs
Promo
footer illustration
Brand logo
© 2024 Hasura Inc. All rights reserved
Github
Titter
Discord
Facebook
Instagram
Youtube
Linkedin