ZH
测试版翻译

@core / rbac

1.0.1 ▾
已验证MIT
GitHub

基于 @core/auth 的角色与权限:通配符、仅限本人规则、防提权授予

代码10 个文件上下文约 615 个 token扫描通过

应用 .genpmignore 后将被注入的确切目录树。固定于

src/lib/rbac/schema.ts只读 · decbadd
// Tablas de @core/rbac. Las recoge drizzle-kit vía src/lib/db/drizzle.config.ts.
import { boolean, index, integer, jsonb, pgTable, primaryKey, text } from 'drizzle-orm/pg-core';
import { users } from '../auth/index.ts';
import { primaryId, timestamps } from '../db/index.ts';

export const roles = pgTable('roles', {
  id: primaryId('rol'),
  /** Clave estable usada en código: `owner`, `editor`, `support`… */
  key: text('key').notNull().unique(),
  label: text('label').notNull(),
  /** Permisos `recurso:acción`, con comodines `posts:*` y `*`, y sufijo `:own` (solo lo propio). */
  permissions: jsonb('permissions').$type<string[]>().notNull().default([]),
  /** Jerarquía: nadie concede ni retira un rol de rango superior al suyo. */
  rank: integer('rank').notNull().default(0),
  /** Roles por defecto: no se pueden borrar ni renombrar su clave. */
  system: boolean('system').notNull().default(false),
  ...timestamps,
});

export const userRoles = pgTable(
  'user_roles',
  {
    userId: text('user_id')
      .notNull()
      .references(() => users.id, { onDelete: 'cascade' }),
    roleId: text('role_id')
      .notNull()
      .references(() => roles.id, { onDelete: 'cascade' }),
    ...timestamps,
  },
  (t) => [primaryKey({ columns: [t.userId, t.roleId] }), index('user_roles_role_idx').on(t.roleId)],
);

export type Role = typeof roles.$inferSelect;

举报 @core/rbac

使用 GitHub 登录后才能举报包。