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"
$
auth
Speciella variabler i "rules"
data
newData
now
{
"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