ES

@core / rbac

1.0.1 ▾
verificadoMIT
GitHub

Roles y permisos sobre @core/auth: comodines, permisos sobre lo propio y concesiones sin escalada

Código10 archivosContexto~615 tokensescaneo superado

El árbol exacto que se inyectará, tras aplicar .genpmignore. Anclado a

src/lib/rbac/permissions.tssolo lectura · decbadd
// Comprobación pura de permisos (sin BD): comodines y sufijo `:own`.

export type PermissionContext = {
  /** Dueño del registro sobre el que se actúa; activa los permisos `…:own`. */
  ownerId?: string | null;
};

// Recurso con `_` permitido: colecciones como `site_settings` (@core/site).
const PERMISSION_RE = /^(\*|[a-z][a-z0-9_-]*(:([a-z][a-z0-9-]*|\*))?(:own)?)$/;

export function isValidPermission(p: string): boolean {
  return PERMISSION_RE.test(p);
}

/**
 * ¿Concede `granted` el permiso `required` (`recurso:acción`)? `*` concede todo; `posts:*` toda acción sobre posts;
 * `posts:update:own` solo si `ctx.ownerId` es el propio usuario.
 */
export function grants(
  granted: readonly string[],
  required: string,
  userId: string,
  ctx: PermissionContext = {},
): boolean {
  const [resource, action] = required.split(':');
  if (!resource || !action || required.endsWith(':own')) throw new Error(`invalid permission check: ${required}`);
  const own = ctx.ownerId != null && ctx.ownerId === userId;
  return granted.some(
    (g) =>
      g === '*' ||
      g === required ||
      g === `${resource}:*` ||
      (own && (g === `${required}:own` || g === `${resource}:*:own`)),
  );
}

Reportar @core/rbac

Inicia sesión con GitHub para reportar un paquete.