๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Database/Firebase

[Firebase] ๋ณด์•ˆ ๊ทœ์น™์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ธฐ - 1

by Fomagran ๐Ÿ’ป 2021. 3. 11.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” 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

 

 

๊ธฐ๋ณธ ๋ณด์•ˆ ๊ทœ์น™  |  Firebase

Firebase ๋ณด์•ˆ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์—ฐํ•œ ๊ทœ์น™ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—…๋ถ€ํ„ฐ ํŠน์ • ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ž‘์—…๊นŒ์ง€ ์–ด๋– 

firebase.google.com

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€