feat: add RBAC schemas with Drizzle ORM integration
This commit is contained in:
36
backend/src/database/schemas/rbac.ts
Normal file
36
backend/src/database/schemas/rbac.ts
Normal 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] }),
|
||||
}));
|
||||
Reference in New Issue
Block a user