Roles

Asigna roles a tus usuarios en el Dashboard, como admin o editor, y úsalos en tu app. Block-Auth envía los roles del usuario en cada login.

Crear y asignar roles

En el Dashboard, crea los roles y asígnalos a tus usuarios. Consulta Roles en el Dashboard.

Cada rol tiene un nombre, que eliges tú y puedes cambiar, y un slug, que Block-Auth genera al crear el rol (por ejemplo acme-x7k2p9) y que no cambia nunca. Usa el slug en tu código: cópialo de la pestaña Roles del Dashboard, debajo del nombre del rol.

Mostrar u ocultar interfaz

Cuando el usuario ha iniciado sesión con el widget, lee sus roles en el frontend. Llegan en la respuesta de tu backend (/code y /me en las rutas del backend), así que no necesitas nada más.

import { useBlockAuthUser } from '@block-auth.io/react'

export function AdminLink() {
  const { hasRoleBySlug, isLoadingUser } = useBlockAuthUser()

  if (isLoadingUser || !hasRoleBySlug('acme-x7k2p9')) return null
  return <a href="/admin">Panel de administración</a>
}

Proteger tu backend

Cómo lo integras

Tu backend recibe los roles al canjear el código de login (/api/auth/token) y los guarda en la sesión del usuario. Compruébalos ahí antes de hacer cualquier cosa que requiera un rol. Con el paquete de Block-Auth, lee el usuario con currentUser, que además cierra la sesión en signedExpiredAt (en .NET los roles son claims de rol):

import { expressSessionStore } from '@block-auth.io/node/express'

function requireRole(slug) {
  return async (req, res, next) => {
    const user = await routes.currentUser({ session: expressSessionStore(req) })
    if (!user?.roles.some((role) => role.slug === slug)) {
      return res.status(403).json({ error: 'Forbidden' })
    }
    next()
  }
}

app.get('/api/admin/stats', requireRole('acme-x7k2p9'), getStats)

Los roles se leen en el login. Si cambias los roles de un usuario en el Dashboard, tu backend los verá en su próximo login.

Referencia

useBlockAuthUser() en React y Vue, y las signals de BlockAuthService en Angular, devuelven:

ValorQué es
rolesLos roles del usuario, como { name, slug }.
roleNames / roleSlugsSolo los nombres, o solo los slugs.
hasRoleBySlug(slug)true si el usuario tiene ese rol.
hasAnyRoleBySlug(slugs)true si el usuario tiene al menos uno.
hasRole(name) / hasAnyRole(names)Lo mismo, por nombre. No distingue mayúsculas.
isLoadingUsertrue mientras se carga el usuario. Espera antes de decidir.
userEl usuario con sesión iniciada (address, did, roles), o null.