
기본으로 부여되는 meta table 이외에 데이터가 저장되는 테이블은 따로 만들어서 관리하는 것을 권장한다는 문서를 봤던 기억이 있어서 테이블을 만들었다..!!
관계형 데이터 베이스라 짱기초는 이해가 어렵지 않았는데 정처기에서 보던 table drop하는 거 하니까 낯설었다.. 몇번을 날려먹었는지 .....
userInfo :
create table userInfo(
id uuid references auth.users on delete cascade not null primary key,
email text
);
create function public.handle_new_user()
returns trigger as $$
begin
insert into public.userInfo(id, email)
values (new.id, new.email);
return new;
end;
$$ language plpgsql security definer;
create trigger on_auth_user_created
after insert on auth.users
for each row execute procedure public.handle_new_user();
CREATE POLICY "User can view own user info only"
ON userinfo
FOR SELECT
USING (auth.uid() = id);
CREATE POLICY "User can update own user info"
ON userinfo
FOR UPDATE
USING (auth.uid() = id);
CREATE POLICY "User can delete own user info"
ON userinfo
FOR DELETE
USING (auth.uid() = id);
-- RLS enabled on userinfo table
ALTER TABLE userinfo ENABLE ROW LEVEL SECURITY;
todolist table :
CREATE TABLE TodoList (
todo_id SERIAL PRIMARY KEY,
user_id UUID NOT NULL REFERENCES userInfo(id) ON DELETE CASCADE,
todo_title TEXT NOT NULL,
todo_detail TEXT,
todo_due_date DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE POLICY "User can view own todos only"
ON TodoList
FOR SELECT
USING (auth.uid() = user_id);
CREATE POLICY "User can insert own todos"
ON TodoList
FOR INSERT
WITH CHECK (auth.uid() = user_id);
CREATE POLICY "User can update own todos"
ON TodoList
FOR UPDATE
USING (auth.uid() = user_id);
CREATE POLICY "User can delete own todos"
ON TodoList
FOR DELETE
USING (auth.uid() = user_id);
-- RLS enabled on TodoList table
ALTER TABLE TodoList ENABLE ROW LEVEL SECURITY;
처음에는 데이터베이스에 RLS 없이 테이블만 만들었는데 찾아보니 RLS를 설정해야 내가 원하는대로 정책으로 제한해둔 조회/수정/삭제 행위를 사용자별로 제한할 수 있다고 한다
이후에 Schema Visualizer로 보면 연결된 내용을 한 눈에 볼 수 있다
