์๋ ํ์ธ์ Foma ์ ๋๋ค!
์ค๋ ์์๋ณผ๊ฑด ํ์ด์ด๋ฒ ์ด์ค ๋ณด์ ๊ท์น์ ๋ํ ๊ฒ์ ๋๋ค.
์์ฆ ํ์ด์ด๋ฒ ์ด์ค์์ ๋ณด์ ๊ท์น์ ์ ๋ฐ์ดํธ ํ๋ผ๊ณ ์ด๋ฐ ์๋ฆผ ๋ ์ค๊ณ
๋ ์ค๋ซ๋์ ์ฌ์ฉํ์ง ์์ ํ๋ก์ ํธ๋ฅผ ์ค๋๋ง์ ๋ค์ด๊ฐ๋๋ ์๋์ ๊ฐ์ permissions์ ๋ํ ์๋ฌ๋ ๋จ๊ณ ...
๊ทธ๋์ ์๋๊ฒ ๋ค ์ถ์ด์ ์ ๋๋ก ์์๋ณด๊ณ ๊ท์น์ ์ ์ฉํ๊ธฐ ์ํด ์ด ๊ธ์ ์ ๋ฆฌํด๋ด ๋๋ค.
Firebase ๋ณด์ ๊ท์น
์ฐ์ ํ์ด์ด๋ฒ ์ด์ค ๋ณด์ ๊ท์น์ ์ฐ๋ฉด ๋ญ๊ฐ ์ข์๊น์?๐ค
ํ์ด์ด๋ฒ ์ด์ค ๊ณต์ ๋ฌธ์์๋ ์๋์ ๊ฐ์ด ๋์์์ด์.
"Firebase ๋ณด์ ๊ท์น์ ์ฌ์ฉํ๋ฉด ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ์ ์ฐํ ๊ท์น ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋ชจ๋ ์ฐ๊ธฐ ์์ ๋ถํฐ ํน์ ๋ฌธ์์ ๋ํ ์์ ๊น์ง ์ด๋ ํ ์ํฉ์ ๋ง๋ ๊ท์น์ด๋ผ๋ ์์ฑํ ์ ์์ต๋๋ค."
ํ๋ง๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฐ ํจ๋ถ๋ก ์กฐ์ํ์ง ๋ชปํ๊ฒ ํ๊ณ ์ํฉ์ ๋ง๊ฒ ์ ์ดํ ์ ์๊ฒ๋ ํ๋ ๊ฒ์ด์ฃ ! ๐
์๋์ ๊ฐ์ด ํ์ด์ด๋ฒ ์ด์ค ์ฝ์๋ก ์ด๋ํ์ ํ์ด์ด์คํ ์ ๊ท์นํญ์ ํ์ธํด๋ณด์๋ฉด ๊ท์น์ ์์ ํ ์๊ฐ ์์ต๋๋ค.
(Firestore ๊ธฐ์ค์ผ๋ก ๊ท์น๋ฑ๋ฅผ ์ค๋ช ๋๋ฆด๊ฒ์!)
์ด๋ค ๊ท์น๋ค์ด ์์๊น์? ๐ง
-
์ ๊ธ ๋ชจ๋
๊ฐ์ฅ ๋จผ์ ์ ๊ธ ๋ชจ๋๊ฐ ์์ต๋๋ค.
์ฝ๋๊ฐ ์ฐ์ฌ์๋ ๊ฐ์ฅ ์๋ซ์ค์ธ allow read,write:if false; ๋ผ๊ณ ์ฐ์ฌ์์ฃ ?
์ด๊ฑด ๋ชจ๋ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๋ฅผ ํ์ฉํ์ง ์๋๋ค๋ ์๋ฏธ์ ๋๋ค.
๊ฐ๋ ํ์ด์ด์คํ ์ด์ ๋ฐ์ดํฐ๊ฐ ์ฝ๊ธฐ๋ ์ฐ๊ธฐ๊ฐ ์๋๋ค๋ฉด ์ด๋ฌํ ์ํ์ผ ๊ฒฝ์ฐ๊ฐ ๋ง์๊ฑฐ์์!
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
-
ํ์ฉ ๋ชจ๋(ํ ์คํธ ๋ชจ๋)
๋ง์ฝ ์ฑ์ ๋ง๋๋ ๋จ๊ณ์ด๊ฑฐ๋ ๊ทธ๋ฅ ํ ์คํธ๋ง ํ ์ฉ๋๋ผ๋ฉด
์ ๊ธ ๋ชจ๋๋ ๋ฐ๋๋ก ๋ชจ๋ํํ ํ์ฉํ ์๋ ์์ด์ผ๊ฒ ์ฃ ?
๋ฐ๋ก ์ด๋ ๊ฒ allow read,write: ์์ true๋ง ๋ฐ๊ฟ์ฃผ์๋ฉด ๋ฉ๋๋ค.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
-
์ธ์ฆ๋ ์ฌ์ฉ์์๊ฒ๋ง ํ์ฉํ๊ธฐ
ํ์ฉ ๋ชจ๋๋ ์ข์ง๋ง ํน์ ๋ชจ๋ฅผ ์ ์์ ์ธ ์ฌ๋์ด ์์ ์ ์์์์? (ํดํน์ ํ๋ค๊ฑฐ๋.....)
๊ทธ๋ฐ ์ฌ๋๋ค์ ์ํด์ ํ์ด์ด๋ฒ ์ด์ค์์ ์์ฃผ ์ข์ ํ๊ฒฝ์ ์ ๊ณตํด์.
๋ฐ๋ก ์ธ์ฆ๋ ์ฌ์ฉ์์๊ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ ํ์ฉํ๋ ๊ฒ์ด์ฃ !
(๋ก๊ทธ์ธํ ์ ์ ๋ฅผ ์์์ผํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ํ์ด์ด๋ฒ ์ด์ค authentification ๊ธฐ๋ฅ๋ ์ฌ์ฉํด์ผ ํฉ๋๋ค.)
์ด๋ ๊ฒ ์์ฑํ๋ฉด ๋ก๊ทธ์ธํ ์ ์ ๊ฐ ํ์ด์ด๋ฒ ์ด์ค์ ์ธ์ฆ๋ ์ ์ ์ธ์ง ํ์ธํ๊ณ ๋ฐ์ดํฐ ์์ ์ ํ์ฉํ๋ ๊ฒ์ด์ฃ .
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
-
์ปจํ ์ธ ์์ ์์๊ฒ๋ง ํ์ฉํ๊ธฐ
๋ง์ฝ ๋ธ๋ก๊ทธ ์ฑ์ด ์๊ณ ์ด๋ค ์ฌ๋์ด ๊ธ์ ์์ ํ๋ ค๊ณ ํฉ๋๋ค.
ํ์ง๋ง ์ด ๊ธ์ ๊ธ์ ์ด ์ฃผ์ธ๋ง ์์ ๋๊ฒ ํด์ผ๊ฒ ์ฃ ?
๊ณ ๋ก ์ด ๊ท์น์ ์ด์ฉํด ์ปจํ ์ธ ์์ ์์ธ์ง ํ์ธํ๊ณ ์์ ์๊ฐ ๋ง๋ค๋ฉด ๋ฐ์ดํฐ ์์ ์ ํ์ฉํ๋ ๊ฒ์ ๋๋ค.
service cloud.firestore {
match /databases/{database}/documents {
// Allow only authenticated content owners access
match /some_collection/{userId}/{documents=**} {
allow read, write: if request.auth != null && request.auth.uid == userId
}
}
}
-
๊ณต๊ฐ ๋๋ ๋น๊ณต๊ฐ ์ค์ ํ๊ธฐ
์์์์ ๊ฐ์ด ๋ง์ฝ ๋ธ๋ก๊ทธ ์ฑ์ด๋ผ๋ฉด ๋น๊ณต๊ฐ ๊ธ์ธ์ง ๊ณต๊ฐ๊ธ์ธ์ง ํ์ธํ๊ณ
์ด๊ฒ์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ํ ์ ์๊ฑฐ๋ ์๊ฒ ์ค์ ํด์ผํ๊ณ ,
๋ํ ์ฝ์ ์๋ ์์ง๋ง ์ฐ๋ ๊ฒ์ ๋ธ๋ก๊ทธ ์ฃผ์ธ๋ง ํด์ผ๊ฒ ์ฃ ?
์๋์ ๊ฐ์ด ์ํ๋ Collection๊ณผ Document ์ฃผ์๋ฅผ ์ ๊ณ allow read: if true ๋ก ๋ชจ๋ ์ฝ๊ธฐ๋ ํ์ฉํ์ง๋ง
๊ธ์ ์์ฑํ๊ฑฐ๋ ์์ ๋๋ ์ญ์ ๋ ํด๋น ๊ธ ์ฃผ์ธ๋ง ํ์ฉํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
service cloud.firestore {
match /databases/{database}/documents {
// Allow public read access, but only content owners can write
match /some_collection/{document} {
allow read: if true
allow create: if request.auth.uid == request.resource.data.author_uid;
allow update, delete: if request.auth.uid == resource.data.author_uid;
}
}
}
-
์ญํ ์ง์ ํ๊ธฐ
๋ง์ฝ ํ๋ธ๋ก๊ทธ๋ฅผ ์ด์ํ๋ค๋ฉด ์์ ์ฌ๋ฌ ์ฃผ์ธ์ด ์์๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์ฌ๋ฌ๋ช ํํ ๊ด๋ฆฌ์ ์ญํ ์ ์ฃผ์ด์ผ๊ฒ ์ฃ ?
์๋์ ๊ฐ์ด ์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฃผ์๋ฅผ ์ ๊ณ ์ญํ ์ ์ฌ๋ฌ๋ช ์๊ฒ ์ง์ ํ ์ ์์ต๋๋ค.
service cloud.firestore {
match /databases/{database}/documents {
// For attribute-based access control, Check a boolean `admin` attribute
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
allow read: true;
// Alterntatively, for role-based access, assign specific roles to users
match /some_collection/{document} {
allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"
}
}
}
์ค๋์ ์ด๋ ๊ฒ ํ์ด์ด๋ฒ ์ด์ค ๋ณด์ ๊ท์น์ ๋ํด ๊ฐ๋จํ๊ฒ ์์๋ณด์๋๋ฐ์.
๋ค์ ๊ธ์ ํ์ด์ด๋ฒ ์ด์ค ๋ณด์ ๊ท์น์ ์ด๋ป๊ฒ ํ์ฉํด์ผ ํ๋์ง ๊ตฌ์ฒด์ ์ธ ์์๋ก ํฌ์คํ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
ํน์๋ผ๋ ํ๋ฆฐ ๋ถ๋ถ์ด ์๊ฑฐ๋ ์ง์ ํ์ค ๋ถ๋ถ์ด ์๋ค๋ฉด ์ธ์ ๋ ๋๊ธ๋ก ๋ฌ์์ฃผ์ธ์.
Reference
๋๊ธ