Rules

Vi mÄste ALLTID validera bÄde i frontend samt backend

I grÀnsnittet för att ge feedback till anvÀndaren

I databasen sÄ att inte felaktig information lagras

Public

{
  "rules": {
    ".read": "true",
    ".write": "true"
  }
}

Vem som helst fÄr skriva och lÀsa frÄn hela vÄr database

Private

{
  "rules": {
    ".read": "false",
    ".write": "false"
  }
}

Ingen fÄr skriva och lÀsa frÄn hela vÄr database

Default

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

Inloggade anvÀndare fÄr skriva till hela databasen

{
  "rules": {
    "users" : {
      ".read" : "auth != null",
      ".write" : "auth != null"
    },
    "todos": {
      ".read" : "true",
      ".write" : "auth != null"
    }
  }
}

Inloggade fÄr skriva/lÀsa till users

Alla fÄr lÀsa men inte skriva till todos

User

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

$uid syftar pÄ key

auth.uid syftar alltid pÄ den inloggade anvÀndaren

read/write cascade
om en förÀlder har det sÄ har barnen det

Men ett barn kan inte skriva över sin förÀlders rÀttigheter

Finns true pÄ förÀldern sÄ spelar det ingen roll om barnet har false

4 regler

  • .read
  • .write
  • .validate
  • .indexOn

.indexOn

För snabbare sökning anvÀnds indexering

Indexera det du söker mest pÄ

HjÀlper firebase att ta fram informationen snabbare

{
  "todos" : {
    ".indexOn" : "createdAt"
  }
}

SÀg Ät databasen vilka egenskaper du oftast kommer att sortera pÄ

GĂ€ller t.ex. .orderByChild()

Simulator finns under

/Database/Rules

".validate"

Speciella variabler i "rules"

  • $
    • key
    • uid
    • postId
  • auth
    • All information om nuvarande anvĂ€ndare

Speciella variabler i "rules"

  • data
    • Existerande data
  • newData
    • Inkommande data
  • now
    • Tiden just nu
{
  "rules": {
    "tweets": {
      "content": {
        ".validate": "newData.val().length <= 140"
      }
    }
  }
}

VÀrdet skrivs bara om den nya datans lÀngd Àr <= 140

{
  "rules": {
    "tweets": {
      "content": {
        ".validate": "newData.val().length <= 140
                      && newData.val().isString()"
      }
    }
  }
}

VÀrdet skrivs bara om den nya datans lÀngd Àr <= 140 och Àr en strÀng

{
  "rules": {
    "tweets": {
      ".read" : "true",
      ".write" : "auth != null"
      "content": {
        ".validate": "newData.val().length <= 140
                      && newData.val().isString()"
      }
    }
  }
}
{
  "rules": {
    "tweets": {
      "$tweetId" : {
        ".write": "data.child(auth.uid).exists()"
        "content": {
          ".validate": "newData.val().length <= 140
                        && newData.val().isString()"
        }
      }
    }
  }
}

Om tweeten har ett barn som Àr mitt anvÀndarID fÄr anvÀndaren skrivaccess

{
  "rules": {
    "tweets": {
      "$tweetId" : {
        ".validate": "newData.hasChildren(['content']])"
      }
  }
} 

tweeten mÄste ha ett innehÄll

LĂ€s mer

https://firebase.google.com/docs/database/security/