references :
https://www.firebase.com/blog/2013-10-01-queries-part-one.html
https://www.firebase.com/blog/2014-01-02-queries-part-two.html
https://www.firebase.com/blog/2013-08-01-new-feature-improved-string-validation-in-security-rules.html
https://www.firebase.com/docs/security/rulesdatasnapshot/index.html
https://gist.github.com/katowulf/4741111
https://gist.github.com/katowulf/6158392
when
	
	
	
		
when
	
	
	
		
		
		
			
		
		
	
	
		 
	
and we like each user read+write only to his key
	
	
	
		
and superadmin manipulate all records
	
	
	
		
when
	
	
	
		
		
		
		
	
	
		 
	
only super admin writes at red rectangle, users can create node only in comp node and must contains adminID, also when editing the record inside comp, the rule checks that current logged userID equals with adminID field!
WARNING when make transaction with Firebase the adminID field must be text otherwise cant compare it!
	
	
	
		
			
			https://www.firebase.com/blog/2013-10-01-queries-part-one.html
https://www.firebase.com/blog/2014-01-02-queries-part-two.html
https://www.firebase.com/blog/2013-08-01-new-feature-improved-string-validation-in-security-rules.html
https://www.firebase.com/docs/security/rulesdatasnapshot/index.html
https://gist.github.com/katowulf/4741111
https://gist.github.com/katowulf/6158392
when
		JavaScript:
	
	{
    "rules": {
     //when
        ".read": true,
        ".write": true,
//this rule doesnt take place!
       "categories": {
        ".read": true,
        ".write": "auth.email == 'x@x.net'" //only super admin can write
    }
    }
}when
 
	and we like each user read+write only to his key
		JavaScript:
	
	      "companies" : {
        "$user": {
        ".read": "$user == auth.id", //user can read his record only
        ".write": "$user == auth.id" //user can write his record only
        }
      },and superadmin manipulate all records
		JavaScript:
	
	      "companies" : {
            //only super admin can read/write anything in companies
            ".read": "auth.email == 'x@x.net'",
            ".write": "auth.email == 'x@x.net'",
        "$user": {
              ".read": "$user == auth.id", //user can read his record only
              ".write": "$user == auth.id" //user can write his record only
        }
      },when
 
	only super admin writes at red rectangle, users can create node only in comp node and must contains adminID, also when editing the record inside comp, the rule checks that current logged userID equals with adminID field!
WARNING when make transaction with Firebase the adminID field must be text otherwise cant compare it!
		JavaScript:
	
	       "categories": {
            ".read": true,
            ".write": "auth.email == 'x@x.net'",
            "$catKeyID": {
                  ".read": true,
                  ".write": "false",
              "comp": {
                  ".read": true,
                  ".write": false ,
                "$compKeyID": {
                                  ".validate": "(data.exists() && data.child('adminID').val()==auth.id) || (!data.exists() && newData.child('adminID').val()==auth.id)",
                                  ".read": true,
                                  ".write": true
                              }
              },
            }
    }