커스텀 테이블

jew·2024년 5월 24일
post-thumbnail

기본으로 부여되는 meta table 이외에 데이터가 저장되는 테이블은 따로 만들어서 관리하는 것을 권장한다는 문서를 봤던 기억이 있어서 테이블을 만들었다..!!
관계형 데이터 베이스라 짱기초는 이해가 어렵지 않았는데 정처기에서 보던 table drop하는 거 하니까 낯설었다.. 몇번을 날려먹었는지 .....

userInfo :

  • id, email만 저장
  • 유저는 본인의 정보에만 접근/수정/삭제할 수 있음
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 :

  • todo_id, user_id, todo_title, todo_detail, todo_due_date, created_at 저장
  • 데이터 삽입할 때만 유저 본인의 todo에 저장하는 게 맞는지 user의 id를 확인
  • 이외에는 체크는 안하고 데이터 저장시 유저의 id 저장
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로 보면 연결된 내용을 한 눈에 볼 수 있다

profile
문제 있으면 의식의 흐름대로 작성하는 블.log

0개의 댓글