feat(permissions): add yacht, company, membership, reservation keys
This commit is contained in:
@@ -1,12 +1,4 @@
|
||||
import {
|
||||
pgTable,
|
||||
text,
|
||||
boolean,
|
||||
timestamp,
|
||||
jsonb,
|
||||
index,
|
||||
uniqueIndex,
|
||||
} from 'drizzle-orm/pg-core';
|
||||
import { pgTable, text, boolean, timestamp, jsonb, index, uniqueIndex } from 'drizzle-orm/pg-core';
|
||||
import { ports } from './ports';
|
||||
|
||||
// ─── Permission Types ─────────────────────────────────────────────────────────
|
||||
@@ -92,6 +84,29 @@ export type RolePermissions = {
|
||||
generate: boolean;
|
||||
manage: boolean;
|
||||
};
|
||||
yachts: {
|
||||
view: boolean;
|
||||
create: boolean;
|
||||
edit: boolean;
|
||||
delete: boolean;
|
||||
transfer: boolean;
|
||||
};
|
||||
companies: {
|
||||
view: boolean;
|
||||
create: boolean;
|
||||
edit: boolean;
|
||||
delete: boolean;
|
||||
};
|
||||
memberships: {
|
||||
view: boolean;
|
||||
manage: boolean;
|
||||
};
|
||||
reservations: {
|
||||
view: boolean;
|
||||
create: boolean;
|
||||
activate: boolean;
|
||||
cancel: boolean;
|
||||
};
|
||||
admin: {
|
||||
manage_users: boolean;
|
||||
view_audit_log: boolean;
|
||||
@@ -132,7 +147,9 @@ export const account = pgTable('account', {
|
||||
id: text('id').primaryKey(),
|
||||
accountId: text('account_id').notNull(),
|
||||
providerId: text('provider_id').notNull(),
|
||||
userId: text('user_id').notNull().references(() => user.id),
|
||||
userId: text('user_id')
|
||||
.notNull()
|
||||
.references(() => user.id),
|
||||
accessToken: text('access_token'),
|
||||
refreshToken: text('refresh_token'),
|
||||
idToken: text('id_token'),
|
||||
@@ -163,7 +180,9 @@ export const verification = pgTable('verification', {
|
||||
export const userProfiles = pgTable(
|
||||
'user_profiles',
|
||||
{
|
||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
||||
id: text('id')
|
||||
.primaryKey()
|
||||
.$defaultFn(() => crypto.randomUUID()),
|
||||
userId: text('user_id').notNull().unique(), // references Better Auth user ID
|
||||
displayName: text('display_name').notNull(),
|
||||
avatarUrl: text('avatar_url'),
|
||||
@@ -179,10 +198,15 @@ export const userProfiles = pgTable(
|
||||
);
|
||||
|
||||
export const roles = pgTable('roles', {
|
||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
||||
id: text('id')
|
||||
.primaryKey()
|
||||
.$defaultFn(() => crypto.randomUUID()),
|
||||
name: text('name').notNull(),
|
||||
description: text('description'),
|
||||
permissions: jsonb('permissions').$type<RolePermissions>().notNull().default({} as RolePermissions),
|
||||
permissions: jsonb('permissions')
|
||||
.$type<RolePermissions>()
|
||||
.notNull()
|
||||
.default({} as RolePermissions),
|
||||
isGlobal: boolean('is_global').notNull().default(true),
|
||||
isSystem: boolean('is_system').notNull().default(false),
|
||||
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
@@ -192,7 +216,9 @@ export const roles = pgTable('roles', {
|
||||
export const portRoleOverrides = pgTable(
|
||||
'port_role_overrides',
|
||||
{
|
||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
||||
id: text('id')
|
||||
.primaryKey()
|
||||
.$defaultFn(() => crypto.randomUUID()),
|
||||
portId: text('port_id')
|
||||
.notNull()
|
||||
.references(() => ports.id, { onDelete: 'cascade' }),
|
||||
@@ -215,7 +241,9 @@ export const portRoleOverrides = pgTable(
|
||||
export const userPortRoles = pgTable(
|
||||
'user_port_roles',
|
||||
{
|
||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
||||
id: text('id')
|
||||
.primaryKey()
|
||||
.$defaultFn(() => crypto.randomUUID()),
|
||||
userId: text('user_id').notNull(), // references Better Auth user ID
|
||||
portId: text('port_id')
|
||||
.notNull()
|
||||
|
||||
Reference in New Issue
Block a user