데이터인증
RLS와 사용자 식별
준비 중사용자 테이블은 프로젝트 데이터베이스에 저장됩니다. 로그인 사용자를 행 수준 보안(RLS)에 연결하는 기능은 아직 제공하지 않습니다.
현재 가능한 작업
사용자 테이블은 프로젝트 데이터베이스의 runlot_auth 스키마에 있습니다. 일반 테이블처럼 조인하여 사용할 수 있습니다.
select p.id, p.title, u.email
from posts p
join runlot_auth.users u on u.id = p.owner_id
order by p.id desc
limit 20;현재는 워커 코드에서 권한을 확인하세요.
const user = await env.auth.user(request);
if (!user) return new Response(null, { status: 401 });
const rows = await env.db.exec(
"select id, title from posts where owner_id = $1 order by id desc limit 20",
[user.id],
);아직 지원하지 않는 작업
PostgreSQL 행 수준 보안(RLS)이 로그인한 사용자를 자동으로 식별하도록 연결하는 기능은 아직 없습니다.
runlot_auth.uid() 함수는 이미 있습니다.
create or replace function runlot_auth.uid() returns uuid language sql stable as $$
select (nullif(current_setting('request.jwt.claims', true), '')::json->>'sub')::uuid
$$;하지만 현재는 request.jwt.claims 설정값을 채우지 않습니다. 따라서 이 함수는 항상 NULL을 반환합니다. 지금 RLS 정책에서 runlot_auth.uid()를 사용하면 모든 행이 필터링됩니다.
RLS 도입을 준비하는 방법
RLS를 사용할 계획이라면 지금부터 사용자 ID를 저장하는 스키마를 구성할 수 있습니다. 소유자 열은 uuid로 만들고 runlot_auth.users.id를 저장하세요. RLS 정책을 활성화하는 일만 이 기능이 제공된 뒤로 미루면 됩니다.
alter table posts add column owner_id uuid not null;
create index on posts (owner_id);
-- RLS 정책은 기능이 제공된 뒤에 추가합니다.지원 상태가 바뀌면 이 페이지를 업데이트합니다.