feat: add RBAC schemas with Drizzle ORM integration

This commit is contained in:
Mathis HERRIOT
2026-01-05 14:15:22 +01:00
parent 27954daf64
commit 9439c004e2

View File

@@ -0,0 +1,36 @@
import { pgTable, varchar, timestamp, uuid, primaryKey, index } from 'drizzle-orm/pg-core';
import { users } from './users';
export const roles = pgTable('roles', {
id: uuid('id').primaryKey().defaultRandom(),
name: varchar('name', { length: 64 }).notNull().unique(),
slug: varchar('slug', { length: 64 }).notNull().unique(),
description: varchar('description', { length: 128 }),
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
}, (table) => ({
slugIdx: index('roles_slug_idx').on(table.slug),
}));
export const permissions = pgTable('permissions', {
id: uuid('id').primaryKey().defaultRandom(),
name: varchar('name', { length: 64 }).notNull().unique(),
slug: varchar('slug', { length: 64 }).notNull().unique(),
description: varchar('description', { length: 128 }),
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
}, (table) => ({
slugIdx: index('permissions_slug_idx').on(table.slug),
}));
export const rolesToPermissions = pgTable('roles_to_permissions', {
roleId: uuid('role_id').notNull().references(() => roles.id, { onDelete: 'cascade' }),
permissionId: uuid('permission_id').notNull().references(() => permissions.id, { onDelete: 'cascade' }),
}, (t) => ({
pk: primaryKey({ columns: [t.roleId, t.permissionId] }),
}));
export const usersToRoles = pgTable('users_to_roles', {
userId: uuid('user_id').notNull().references(() => users.uuid, { onDelete: 'cascade' }),
roleId: uuid('role_id').notNull().references(() => roles.id, { onDelete: 'cascade' }),
}, (t) => ({
pk: primaryKey({ columns: [t.userId, t.roleId] }),
}));