Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Firestoreのルール設定 割と何でも出来てビビる/Firestore rule setting

Firestoreのルール設定 割と何でも出来てビビる/Firestore rule setting

Webナイト宮崎 Vol.4
登壇枠で使用

参考URL
https://tegehoge.connpass.com/event/128502/

kkznch

May 17, 2019
Tweet

More Decks by kkznch

Other Decks in Technology

Transcript

  1. Firestoreͷϧʔϧઃఆ
    ׂͱԿͰ΋ग़དྷͯϏϏΔ
    גࣜձࣾRe:Build
    Յ਺ ါىʢ@kkznchʣ
    2019೥5݄17೔ʢۚʣ
    WebφΠτٶ࡚ Vol.4 ʙͯ͛FirebaseΛֶͼ͍ͨʙ

    View Slide

  2. ͚͚ͣΜ @kkznch
    Յ਺ ါى
    1990೥ͷԭೄੜ·Ε
    ిྗձࣾͷITΠϯϑϥɺηΩϡϦςΟ

    גࣜձࣾRe:BuildͰWebΤϯδχΞ

    View Slide

  3. ձࣾ঺հ
    • גࣜձࣾRe:Buildʢ2017೥11݄ʹઃཱʣ
    • ݱࡏͷࣾһ਺͸໊̑
    • ԭೄΛڌ఺ͱ͠ɺجຊతʹ͸Laravel΍Vue.jsΛ
    ࢖ͬͯडୗɾࣗࣾαʔϏε։ൃΛ͍ͯ͠Δ
    • ϦϞʔτϫʔΫɺࣗ༝ͳಇ͖ํΛਪ঑͍ͯ͠Δ

    View Slide

  4. Firestore

    View Slide

  5. Google͕ఏڙ͢ΔNoSQL DB

    View Slide

  6. ֊૚ܕσʔλߏ଄
    ΞΫηεϧʔϧΛઃఆͰ͖Δ

    View Slide

  7. ΋͠ϧʔϧΛઃఆ͠ͳ͍ͱ…

    View Slide

  8. Databaseͷϧʔϧ

    View Slide

  9. ֊૚͝ͱʹϧʔϧΛద༻
    usersͱɺͦͷதͷimagesʹ
    ରͯͦ͠ΕͧΕϧʔϧΛద༻Ͱ͖Δ
    service cloud.firestore {
    match /databases/{database}/documents {
    match /users/{userId} {
    // rules…
    match /images/{imageId} {
    // rules…
    }
    }
    }
    }

    View Slide

  10. ֊૚ҎԼશͯʹϧʔϧΛద༻
    service cloud.firestore {
    match /databases/{database}/documents {
    match /{users=**} {
    // rules…
    }
    }
    }
    usersͱͦͷԼҐશͯʹϧʔϧΛద༻

    View Slide

  11. allowϧʔϧྫ̍ʢςετ༻ʣ
    service cloud.firestore {
    match /databases/{database}/documents {
    match /{document=**} {
    allow read, write: if true;
    }
    }
    }
    υΩϡϝϯτશମʹৗʹread, writeΛallow͢ΔΑ

    View Slide

  12. allowϧʔϧྫ̎
    service cloud.firestore {
    match /databases/{database}/documents {
    match /{document=**} {
    allow read, write: if request.auth != null;
    }
    }
    }
    ϩάΠϯ͍ͯ͠ΔͳΒread, writeΛallow͢ΔΑ

    View Slide

  13. allowͷछྨ
    • read
    ‣ get
    ‣ list
    • write
    ‣ create
    ‣ update
    ‣ delete

    View Slide

  14. request, resource ม਺
    • request
    ‣ ΫϥΠΞϯτ͔ΒͷϦΫΤετʹؔ
    ͢Δ৘ใΛࢀরͰ͖Δ
    • resource
    ‣ ݱࡏͷDBͷঢ়ଶΛࢀরͰ͖Δ

    View Slide

  15. get(), exists() ϝιου
    • get()
    ‣ Ҿ਺ʹ༩͑ͨύε͔ΒΦϒδΣΫτ
    Λऔಘ͢Δ
    • exists()
    ‣ Ҿ਺ʹ༩͑ͨύεʹΦϒδΣΫτ͕
    ଘࡏ͢Δ͔bool஋Ͱฦ͢

    View Slide

  16. in ʹ͍ͭͯ
    • if x in y
    ‣ x͕഑ྻyʹؚ·Ε͍ͯΔ͔ΛνΣο
    Ϋ͢Δ

    View Slide

  17. ૊Έ߹ΘͤΔͱ͍͍ײ͡ʹͳΔ
    service cloud.firestore {
    match /databases/{database}/documents {
    function getRoom(roomId) {
    return get(/databases/{database}/documents/rooms/{roomId});
    }
    match /rooms/{roomId} {
    allow read, update: if request.auth != null
    && request.auth.uid in getRoom(roomId).data.users;
    }
    }
    }
    ྫɿϧʔϜϝϯόʔͰ͋Ε͹read, update͕Ͱ͖Δ

    View Slide

  18. ·ͱΊ

    View Slide

  19. ·ͱΊ
    • Firestore͸ϦιʔεຖʹೝՄͷઃఆ͕Ͱ͖Δ
    • allow, function, request/resourceม਺, get()/
    exists()ͳͲΛ૊Έ߹Θͤͯࡉ͔͍ઃఆ͕Մೳ
    • ద੾ʹϧʔϧΛઃఆͯ͠৘ใΛकΓ·͠ΐ͏

    View Slide