Create database schema for passkey credentials. Co-authored-by: ASOwnerYT <[email protected]>
36 lines
1.3 KiB
SQL
36 lines
1.3 KiB
SQL
-- Create passkeys table for WebAuthn credential storage
|
|
CREATE TABLE IF NOT EXISTS public.passkeys (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
credential_id TEXT NOT NULL UNIQUE,
|
|
public_key TEXT NOT NULL,
|
|
sign_count INTEGER NOT NULL DEFAULT 0,
|
|
transports TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
backup_eligible BOOLEAN DEFAULT FALSE,
|
|
backup_state BOOLEAN DEFAULT FALSE,
|
|
aaguid UUID,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
last_used TIMESTAMP WITH TIME ZONE,
|
|
friendly_name TEXT
|
|
);
|
|
|
|
-- Enable RLS on passkeys table
|
|
ALTER TABLE public.passkeys ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Create RLS policies for passkeys
|
|
CREATE POLICY "Users can view their own passkeys" ON public.passkeys
|
|
FOR SELECT USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can insert their own passkeys" ON public.passkeys
|
|
FOR INSERT WITH CHECK (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can delete their own passkeys" ON public.passkeys
|
|
FOR DELETE USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can update their own passkeys" ON public.passkeys
|
|
FOR UPDATE USING (auth.uid() = user_id);
|
|
|
|
-- Create index for faster credential lookups
|
|
CREATE INDEX idx_passkeys_credential_id ON public.passkeys(credential_id);
|
|
CREATE INDEX idx_passkeys_user_id ON public.passkeys(user_id);
|