mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 09:25:06 +03:00
fix: example schemas were both broken for app
This commit is contained in:
1 parent
d25ffe34d2
commit
71f2fe85f3
3 files changed
+16
-127
No files matched your search
@@ -1,82 +0,0 @@
|
||||
-- users table exists but not able to reference
|
||||
-- USER PROFILES
|
||||
CREATE TYPE public.user_status AS ENUM ('ONLINE', 'OFFLINE');
|
||||
CREATE TABLE public.users (
|
||||
id uuid NOT NULL PRIMARY KEY,
|
||||
-- UUID from auth.users (Supabase)
|
||||
username text,
|
||||
list_id uuid NULL,
|
||||
-- can be selected by user - current list and updated
|
||||
status user_status DEFAULT 'OFFLINE'::public.user_status
|
||||
);
|
||||
ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Allow logged-in read access" on public.users FOR
|
||||
SELECT USING (auth.role() = 'authenticated');
|
||||
CREATE POLICY "Allow individual insert access" on public.users FOR
|
||||
INSERT WITH CHECK (auth.uid() = id);
|
||||
CREATE POLICY "Allow individual update access" on public.users FOR
|
||||
UPDATE USING (auth.uid() = id);
|
||||
-- change to uuid primary key
|
||||
CREATE TABLE lists (
|
||||
lists_id uuid PRIMARY KEY,
|
||||
list_name text NOT NULL,
|
||||
inserted_at timestamp without time zone DEFAULT timezone('utc'::text, now()) NOT NULL,
|
||||
updated_at timestamp without time zone DEFAULT timezone('utc'::text, now()) NOT NULL
|
||||
);
|
||||
CREATE TABLE userlists (
|
||||
users_id uuid REFERENCES public.users NOT NULL,
|
||||
lists_id uuid REFERENCES lists NOT NULL
|
||||
);
|
||||
ALTER TABLE userlists ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE lists ENABLE ROW LEVEL SECURITY;
|
||||
CREATE TABLE tasks (
|
||||
task_text text NOT NULL,
|
||||
complete boolean DEFAULT false,
|
||||
id bigserial PRIMARY KEY,
|
||||
user_id uuid REFERENCES public.users NOT NULL,
|
||||
list_id uuid REFERENCES lists NOT NULL,
|
||||
inserted_at timestamp without time zone DEFAULT timezone('utc'::text, now()) NOT NULL,
|
||||
updated_at timestamp without time zone DEFAULT timezone('utc'::text, now()) NOT NULL
|
||||
);
|
||||
ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Allow individual select access" on userlists FOR
|
||||
SELECT USING (auth.uid() = users_id);
|
||||
CREATE POLICY "Allow individual insert access" on userlists FOR
|
||||
INSERT WITH CHECK (auth.uid() = users_id);
|
||||
CREATE POLICY "Allow individual update access" on userlists FOR
|
||||
UPDATE USING (auth.uid() = users_id);
|
||||
CREATE POLICY "Allow logged-in full access" on lists FOR
|
||||
SELECT USING (auth.role() = 'authenticated');
|
||||
CREATE POLICY "Allow individual insert access" on lists FOR
|
||||
INSERT WITH CHECK (auth.role() = 'authenticated');
|
||||
CREATE POLICY "Allow individual update access" on lists FOR
|
||||
UPDATE USING (auth.role() = 'authenticated');
|
||||
-- user should see other tasks in lists they are a member of
|
||||
-- todo
|
||||
-- try using count?
|
||||
- - CREATE POLICY "Allow logged-in read access to shared list" on tasks FOR
|
||||
SELECT USING (
|
||||
select count(user_id)
|
||||
from (
|
||||
SELECT user_id
|
||||
from userlists
|
||||
where userlists.list_id = list_id
|
||||
) > 0
|
||||
);
|
||||
-- CREATE POLICY "Allow read access to shared lists" on tasks FOR SELECT USING (SELECT user_id from userlists where userlists.lists_id=lists_id );
|
||||
-- no to RS
|
||||
-- ALTER TABLE tasks SET ROW SECURITY FOR SELECT TO (SELECT users_id from userslists where userlists.lists_id=list_id);
|
||||
-- CREATE POLICY "Allow logged in user to see items on their current list" on tasks FOR SELECT USING ( select list_id from public.users where public.users.list_id=list_id AND public.users.user_id=auth.uid() )
|
||||
CREATE POLICY "Allow logged in user to see items on their current list" on tasks FOR
|
||||
SELECT USING (
|
||||
EXISTS(
|
||||
select 1
|
||||
from userlists
|
||||
where userlists.lists_id = tasks.list_id
|
||||
AND userlists.users_id = auth.uid()
|
||||
)
|
||||
) -- user can update their tasks
|
||||
CREATE POLICY "Allow individual insert access" on tasks FOR
|
||||
INSERT WITH CHECK (auth.uid() = user_id);
|
||||
CREATE POLICY "Allow individual update access" on tasks FOR
|
||||
UPDATE USING (auth.uid() = user_id);
|
||||
@@ -1,45 +0,0 @@
|
||||
create table lists (
|
||||
id bigint generated by default as identity primary key,
|
||||
name text not null,
|
||||
user_id uuid references auth.users not null,
|
||||
inserted_at timestamp with time zone default timezone('utc'::text, now()) not null
|
||||
);
|
||||
create table tasks (
|
||||
id bigint generated by default as identity primary key,
|
||||
task_text text not null,
|
||||
complete boolean default false,
|
||||
list_id bigint REFERENCES lists not null,
|
||||
inserted_at timestamp with time zone default timezone('utc'::text, now()) not null
|
||||
);
|
||||
alter table lists enable row level security;
|
||||
alter table tasks enable row level security;
|
||||
create policy "Individuals can create lists." on lists for
|
||||
insert with check (auth.uid() = user_id);
|
||||
create policy "Individuals can view their own lists. " on lists for
|
||||
select using (auth.uid() = user_id);
|
||||
create policy "Individuals can update their own lists." on lists for
|
||||
update using (auth.uid() = user_id);
|
||||
create policy "Individuals can create tasks in their own lists." on tasks for
|
||||
insert with check (
|
||||
list_id in (
|
||||
select id
|
||||
from lists
|
||||
where user_id = auth.uid()
|
||||
)
|
||||
);
|
||||
create policy "Individuals can view tasks that exist in one of their lists." on tasks for
|
||||
select using (
|
||||
list_id in (
|
||||
select id
|
||||
from lists
|
||||
where user_id = auth.uid()
|
||||
)
|
||||
);
|
||||
create policy "Individuals can update their own tasks." on tasks for
|
||||
update using (
|
||||
list_id in (
|
||||
select id
|
||||
from lists
|
||||
where user_id = auth.uid()
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,16 @@
|
||||
CREATE TABLE lists (
|
||||
uuid text,
|
||||
id bigserial PRIMARY KEY,
|
||||
inserted_at timestamp without time zone DEFAULT timezone('utc' :: text, now()) NOT NULL,
|
||||
updated_at timestamp without time zone DEFAULT timezone('utc' :: text, now()) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE tasks (
|
||||
task_text text NOT NULL,
|
||||
complete boolean DEFAULT false,
|
||||
id bigserial PRIMARY KEY,
|
||||
list_id bigint REFERENCES lists NOT NULL,
|
||||
inserted_at timestamp without time zone DEFAULT timezone('utc' :: text, now()) NOT NULL,
|
||||
updated_at timestamp without time zone DEFAULT timezone('utc' :: text, now()) NOT NULL
|
||||
);
|
||||
|
||||
Reference in new issue
Block a user