JA
ベータ版の翻訳

@core / rbac

1.0.1 ▾
認証済みMIT
GitHub

@core/auth 上のロールと権限:ワイルドカード、本人限定ルール、権限昇格を防ぐ付与

コード10 ファイルコンテキスト約 615 トークンスキャン合格

.genpmignore 適用後に組み込まれる正確なツリーです。固定先:

src/lib/rbac/permissions.ts読み取り専用 · 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`)),
  );
}

@core/rbac を報告

パッケージを報告するには GitHub でログインしてください。

GitHub で続ける