26.9.10 / Thu

BaO·2026년 9월 10일

TIL

목록 보기
20/33

Method Chaining

  • 선언적 방식
supabase.table(...)
        .select(...)
        .eq(...)
        .execute(...)
class SupabaseEx:
    def __init__(self):
        self.settings = []

    def table(self, table):
        self.settings.append(table)
        return self

    def select(self, fields):
        self.settings.append(fields)
        return self # 생성된 동일 객체

    def eq(self, name, value):
        self.settings.append(f'{name}={value}')
        return self

    def execute(self):
        print(self.settings)
        print('실행..')
        return '처리된 결과'

supabase = SupabaseEx()

response = (
    supabase.table("users")
        .select('*')
        .eq('email', 'user01@test.org')
        .execute()
)
# CRUD Class
class AiLog:

    def __init__(self):
        user = supabase.auth.get_user()
        if not user: # 미로그인 상태
            raise PermissionError('로그인 필요함')

        self.user = user.user

    def create_documents(self, title, content):
        response = (
            supabase.table("documents")
                    .insert({
                        "title" : title,
                        "content" : content,
                        "user_id" : self.user.id
                    }).execute()
        )

        return response.data

    def get_my_documents(self):
        response = (
            supabase.table("documents")
                    .select("*")
                    .eq("user_id", self.user.id)
                    .execute()
        )

        return response.data


ai_log = AiLog()

ai_log.create_documents("세 번째 문서", "본문 내용")
ai_log.get_my_documents()

RLS ( Row Level Security )

  • CRUD
    • 회원의 권한 체크
-- 본인 데이터에 대해 모든 작업(SELECT, INSERT, UPDATE, DELETE) 허용
create policy "본인 문서 전체 관리"
on documents
for all
to authenticated
using (auth.uid() = user_id) -- 이미 존재하는 데이터에 대한 통제 (조회, 수정, 삭제)
with check (auth.uid() = user_id); -- 추가, 수정, 삭제시에 권한 확인

0개의 댓글