supabase Storage Policy / 규칙 설정 팁

이건개발·2024년 8월 5일
1

왜이케 이해가 안되게 만들어졌는지 모르겠는데
이게 괄호가 너무 많네요 결국 나머지는 AND OR 을 잘 조합하면 됩니다.

버킷 조건

bucket_id = 'profile'::text

당연히 버킷에 있는 권한을 수정하는거라 생략가능 할까 했는데 해보니 에러군요
그냥 있어야하나봅니다.

폴더 이름 조건

(storage.foldername(name))[1] = 'public'::text

최대한 관호를 빼고 보니 여기까지 줄어드는군요
폴더명을 비교하는건데 편의상 전부 소문자 쓰시기 바랍니다.

확장자 조건

storage."extension"(name) = 'jpg'

역시 소문자만 쓰기로해요 LOWER() 함수가 있긴한데 관호만 많아집니다.

특정확장자만 올릴 수 있는 조건을 만들 수 있습니다.
길어져서 써보고 싶진않군요

사용자 권한 조건

이거는 키보드로 치는게 아니고

규칙 편집하는 부분에 보시면 제목 아래에 뭔가(?) 가 있습니다.
누르시면

이런식으로 드랍박스가 나오고 권한들을 고를 수 있습니다.

아무것도 안고르면 아무나 만질 수 있을꺼 같지만
아무나를 원하시면 anon 을 고르셔야합니다.

로그인된 사용자나 백엔드에서 로그인해서 사용하는 경우
auth~~~ 고르시면 로그인한 사용를 조건에 넣을 수 있습니다.

저는 이거 두개만 사용해봤습니다.
복잡하게 하면 유저 별로 별도의 폴더를 이용할 수 있나본데
복잡해보입니다. 생성할때 가이드로 몇가지 제공하니 그걸 참고하셔야할꺼 같습니다.

실습

폴더가 public , private 있다고 치구요

insert 는 아무나 public 폴더에 할수 있다. 는 조건을 만들려면

bucket_id = 'my_bucket'::text AND
(storage.foldername(name))[1] = 'public'::text

이렇게 하고 권한은 anon 하나만 주면 되겠습니다.

저같은 경우에 프사 업로드를 구현해야되서
public 에는 아무나 올리고 백엔드에서 private 으로 옮기고 db 저장하는게 필요해서

update 에는 auth~~ 조건을 걸었습니다.

bucket_id = 'my_bucket'::text AND
(
	(storage.foldername(name))[1] = 'public'::text OR
    (storage.foldername(name))[1] = 'private'::text
)

괄호랑 AND OR 같은걸 잘 활용하시면 될 것 같습니다.
저장하고 다시 들어오면 제가 작성한게 저장되어있지 않고
본인들이 알아서 줄바꿈 띄어쓰기 다 빼서 최적화 해놓네요

사용자에게 편리한 방식은 아닌거 같군요
매우 불편합니다.

괄호가 장난 아닙니다.

profile
게임 개발 / 웹 개발 / 주식 투자 / 은퇴자 / 클라우드타입 / 파이어베이스 / 수퍼베이스 / 유니티

0개의 댓글