Skip to content

Instantly share code, notes, and snippets.

@sararob
Last active April 26, 2022 22:21
Show Gist options
  • Save sararob/331760829a9dcb4be3e7 to your computer and use it in GitHub Desktop.
Save sararob/331760829a9dcb4be3e7 to your computer and use it in GitHub Desktop.

Revisions

  1. sararob revised this gist Dec 23, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion security-rules.js
    Original file line number Diff line number Diff line change
    @@ -21,7 +21,7 @@
    "$room": {
    "$message": {
    //can add a message if they are a MEMBER
    ".write": "(!data.exists() && newData.exists() && root.child($room + '/users/' + auth.uid).val() >= 10)"
    ".write": "(!data.exists() && newData.exists() && root.child('rooms/' + $room + '/users/' + auth.uid).val() >= 10)"
    }
    }
    }
  2. sararob revised this gist Sep 5, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion data-structure.js
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    /*
    This example shows how you can used your data structure as a basis for
    This example shows how you can use your data structure as a basis for
    your Firebase security rules to implement role-based security. We store
    each user by their Twitter uid, and use the following simplistic approach
    for user roles:
  3. sararob revised this gist Sep 5, 2014. 2 changed files with 17 additions and 12 deletions.
    21 changes: 12 additions & 9 deletions data-structure.js
    Original file line number Diff line number Diff line change
    @@ -44,16 +44,19 @@ shows the corresponding security rules.
    ...
    },
    "messages": {
    -JVwTPcWMIt0J6Gbtrqh: {
    "room-id": "public-room-1",
    "user": "twitter:12345",
    "text": "Hello everyone!"
    "public-room-1": {
    -JVwTPcWMIt0J6Gbtrqh: {
    "user": "twitter:12345",
    "text": "Hello everyone!"
    }
    ...
    },
    -JVwU5tLQRPbzXo4s_a1: {
    "room-id": "admin-only-room",
    "user": "twitter:56789",
    "text": "This is a top secret message."
    "admin-only-room": {
    -JVwU5tLQRPbzXo4s_a1: {
    "user": "twitter:56789",
    "text": "This is a top secret message."
    }
    ...
    }
    ...
    }
    }
    8 changes: 5 additions & 3 deletions security-rules.js
    Original file line number Diff line number Diff line change
    @@ -18,9 +18,11 @@
    }
    },
    "messages": {
    "$message": {
    //can add a message if they are a MEMBER
    ".write": "(!data.exists() && newData.exists() && root.child('/rooms/' + $room + '/users/' + auth.uid).val() >= 10)"
    "$room": {
    "$message": {
    //can add a message if they are a MEMBER
    ".write": "(!data.exists() && newData.exists() && root.child($room + '/users/' + auth.uid).val() >= 10)"
    }
    }
    }
    }
  4. sararob revised this gist Sep 4, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion security-rules.js
    Original file line number Diff line number Diff line change
    @@ -20,7 +20,7 @@
    "messages": {
    "$message": {
    //can add a message if they are a MEMBER
    ".write": "(!data.exists() && newData.exists() && root.child($room + '/users/' + auth.uid).val() >= 10)"
    ".write": "(!data.exists() && newData.exists() && root.child('/rooms/' + $room + '/users/' + auth.uid).val() >= 10)"
    }
    }
    }
  5. sararob revised this gist Sep 4, 2014. 1 changed file with 3 additions and 1 deletion.
    4 changes: 3 additions & 1 deletion data-structure.js
    Original file line number Diff line number Diff line change
    @@ -40,7 +40,8 @@ shows the corresponding security rules.
    "users": {
    "twitter:56789": 20
    }
    },
    }
    ...
    },
    "messages": {
    -JVwTPcWMIt0J6Gbtrqh: {
    @@ -53,5 +54,6 @@ shows the corresponding security rules.
    "user": "twitter:56789",
    "text": "This is a top secret message."
    }
    ...
    }
    }
  6. sararob revised this gist Sep 4, 2014. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion data-structure.js
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,8 @@ for user roles:
    20 - MODERATOR
    99 - ADMINISTRATOR
    This file shows the data structure, and the security-rules file below shows the corresponding security rules.
    This file shows the data structure, and the security-rules file below
    shows the corresponding security rules.
    */

  7. sararob revised this gist Sep 4, 2014. 3 changed files with 8 additions and 45 deletions.
    2 changes: 2 additions & 0 deletions data-structure.js
    Original file line number Diff line number Diff line change
    @@ -10,6 +10,8 @@ for user roles:
    20 - MODERATOR
    99 - ADMINISTRATOR
    This file shows the data structure, and the security-rules file below shows the corresponding security rules.
    */

    {
    39 changes: 0 additions & 39 deletions role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -1,39 +0,0 @@
    /* This shows how you can authenticate users and store user data in Firebase
    using Firebase Simple Login with Twitter. The corresponding security rules
    are in the security.json file */

    // Define Firebase references
    var ref = new Firebase("<your-firebase>.firebaseio.com/");
    var usersRef = ref.child("users");
    var currentUser = null; //we'll use this to see if a user is currently logged in

    // Call an 'auth' function when a user clicks a login button (this example uses twitter)
    $('#login').on("click", function () {
    auth.login('twitter');
    });

    // Authenticate users and store each user in Firebase by their Twitter UID
    var auth = new FirebaseSimpleLogin(ref, function (error, user) {
    if (error) {
    console.log(error);
    } else if (user) {
    usersRef.child(user.uid).set({pic: user.thirdPartyUserData.profile_image_url, username: user.username});
    currentUser = user;
    } else {
    //user is logged out
    }
    });

    // When a user adds a message, add the message data to Firebase
    $('#message-submit').on('click', function () {
    if (currentUser != null) {

    var message = $('#msgInput').val();

    //Send the message to Firebase
    messagesRef.push({user: currentUser.uid, username: currentUser.username, message: message});

    } else {
    alert('You must login with Twitter to post!');
    }
    });
    12 changes: 6 additions & 6 deletions security-rules.js
    Original file line number Diff line number Diff line change
    @@ -1,12 +1,6 @@
    {
    "rules": {
    ".read": true,
    "messages": {
    "$message": {
    //can add a message if they are a MEMBER
    ".write": "(!data.exists() && newData.exists() && root.child($room + '/users/' + auth.uid).val() >= 10)"
    }
    },
    "users": {
    "$user": {
    //can add a message if authenticated
    @@ -22,6 +16,12 @@
    }
    }
    }
    },
    "messages": {
    "$message": {
    //can add a message if they are a MEMBER
    ".write": "(!data.exists() && newData.exists() && root.child($room + '/users/' + auth.uid).val() >= 10)"
    }
    }
    }
    }
  8. sararob revised this gist Sep 4, 2014. 3 changed files with 81 additions and 16 deletions.
    54 changes: 54 additions & 0 deletions data-structure.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,54 @@
    /*
    This example shows how you can used your data structure as a basis for
    your Firebase security rules to implement role-based security. We store
    each user by their Twitter uid, and use the following simplistic approach
    for user roles:
    0 - GUEST
    10 - USER
    20 - MODERATOR
    99 - ADMINISTRATOR
    */

    {
    "users": {
    "twitter:12345": {
    "full-name": "Sara Robinson",
    "username": "SRobTweets",
    "role-value": 10
    },
    "twitter:56789": {
    "full-name": "Michael 'Kato' Wulf",
    "username": "katowulf",
    "role-value": 20
    }
    ....
    },
    "rooms": {
    "public-room-1": {
    "users": {
    "twitter:56789": 20,
    "twitter:12345": 10
    }
    },
    "admin-only-room": {
    "users": {
    "twitter:56789": 20
    }
    },
    },
    "messages": {
    -JVwTPcWMIt0J6Gbtrqh: {
    "room-id": "public-room-1",
    "user": "twitter:12345",
    "text": "Hello everyone!"
    },
    -JVwU5tLQRPbzXo4s_a1: {
    "room-id": "admin-only-room",
    "user": "twitter:56789",
    "text": "This is a top secret message."
    }
    }
    }
    27 changes: 27 additions & 0 deletions security-rules.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    {
    "rules": {
    ".read": true,
    "messages": {
    "$message": {
    //can add a message if they are a MEMBER
    ".write": "(!data.exists() && newData.exists() && root.child($room + '/users/' + auth.uid).val() >= 10)"
    }
    },
    "users": {
    "$user": {
    //can add a message if authenticated
    ".write": "auth.uid === $user"
    }
    },
    "rooms": {
    "$room": {
    "users": {
    // can write to the users list only if ADMINISTRATOR
    "$user": {
    "write":"newData.parent().child(auth.uid).val() === 99"
    }
    }
    }
    }
    }
    }
    16 changes: 0 additions & 16 deletions security-rules.json
    Original file line number Diff line number Diff line change
    @@ -1,16 +0,0 @@
    {
    "rules": {
    ".read": true,
    "messages": {
    "$message": {
    ".write": "auth.uid != null && auth.uid === newData.child('user').val()",
    ".validate": "newData.child('message').val() != ''"
    }
    },
    "users": {
    "$user": {
    ".write": "auth.uid === $user"
    }
    }
    }
    }
  9. sararob revised this gist Sep 2, 2014. 2 changed files with 18 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    /* This shows how you can authenticate users and store user data in Firebase
    using Firebase Simple Login with Twitter. The corresponding security rules for
    this app are available in this gist: https://gist.github.com/sararob/8694d5b4111e4ed31cec */
    using Firebase Simple Login with Twitter. The corresponding security rules
    are in the security.json file */

    // Define Firebase references
    var ref = new Firebase("<your-firebase>.firebaseio.com/");
    16 changes: 16 additions & 0 deletions security-rules.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,16 @@
    {
    "rules": {
    ".read": true,
    "messages": {
    "$message": {
    ".write": "auth.uid != null && auth.uid === newData.child('user').val()",
    ".validate": "newData.child('message').val() != ''"
    }
    },
    "users": {
    "$user": {
    ".write": "auth.uid === $user"
    }
    }
    }
    }
  10. sararob revised this gist Sep 2, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -34,6 +34,6 @@ $('#message-submit').on('click', function () {
    messagesRef.push({user: currentUser.uid, username: currentUser.username, message: message});

    } else {
    alert('You must login with Twitter to post!');
    alert('You must login with Twitter to post!');
    }
    });
  11. sararob revised this gist Sep 2, 2014. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -30,9 +30,9 @@ $('#message-submit').on('click', function () {

    var message = $('#msgInput').val();

    //Send the message to Firebase
    messagesRef.push({user: currentUser.uid, username: currentUser.username, message: message});
    //Send the message to Firebase
    messagesRef.push({user: currentUser.uid, username: currentUser.username, message: message});

    } else {
    alert('You must login with Twitter to post!');
    }
  12. sararob revised this gist Sep 2, 2014. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -27,11 +27,12 @@ var auth = new FirebaseSimpleLogin(ref, function (error, user) {
    // When a user adds a message, add the message data to Firebase
    $('#message-submit').on('click', function () {
    if (currentUser != null) {
    var message = $('#msgInput').val();

    var message = $('#msgInput').val();

    //Send the message to Firebase
    messagesRef.push({user: currentUser.uid, username: currentUser.username, message: message});
    } else {
    alert('You must login with Twitter to post!');
    }
  13. sararob revised this gist Sep 2, 2014. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -27,12 +27,12 @@ var auth = new FirebaseSimpleLogin(ref, function (error, user) {
    // When a user adds a message, add the message data to Firebase
    $('#message-submit').on('click', function () {
    if (currentUser != null) {
    var message = $('#msgInput').val();
    var message = $('#msgInput').val();

    //Send the message to Firebase
    messagesRef.push({user: currentUser.uid, username: currentUser.username, message: message});
    //Send the message to Firebase
    messagesRef.push({user: currentUser.uid, username: currentUser.username, message: message});

    } else {
    alert('You must login with Twitter to post!');
    }
    alert('You must login with Twitter to post!');
    }
    });
  14. sararob revised this gist Sep 2, 2014. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -26,12 +26,13 @@ var auth = new FirebaseSimpleLogin(ref, function (error, user) {

    // When a user adds a message, add the message data to Firebase
    $('#message-submit').on('click', function () {
    if (currentUser != null) {
    if (currentUser != null) {
    var message = $('#msgInput').val();

    //Send the message to Firebase
    messagesRef.push({user: currentUser.uid, username: currentUser.username, message: message});
    } else {

    } else {
    alert('You must login with Twitter to post!');
    }
    });
  15. sararob revised this gist Sep 2, 2014. 1 changed file with 14 additions and 0 deletions.
    14 changes: 14 additions & 0 deletions role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -5,6 +5,7 @@ this app are available in this gist: https://gist.github.com/sararob/8694d5b4111
    // Define Firebase references
    var ref = new Firebase("<your-firebase>.firebaseio.com/");
    var usersRef = ref.child("users");
    var currentUser = null; //we'll use this to see if a user is currently logged in

    // Call an 'auth' function when a user clicks a login button (this example uses twitter)
    $('#login').on("click", function () {
    @@ -17,7 +18,20 @@ var auth = new FirebaseSimpleLogin(ref, function (error, user) {
    console.log(error);
    } else if (user) {
    usersRef.child(user.uid).set({pic: user.thirdPartyUserData.profile_image_url, username: user.username});
    currentUser = user;
    } else {
    //user is logged out
    }
    });

    // When a user adds a message, add the message data to Firebase
    $('#message-submit').on('click', function () {
    if (currentUser != null) {
    var message = $('#msgInput').val();

    //Send the message to Firebase
    messagesRef.push({user: currentUser.uid, username: currentUser.username, message: message});
    } else {
    alert('You must login with Twitter to post!');
    }
    });
  16. sararob revised this gist Sep 2, 2014. 1 changed file with 5 additions and 1 deletion.
    6 changes: 5 additions & 1 deletion role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,7 @@
    /* This shows how you can authenticate users and store user data in Firebase
    using Firebase Simple Login with Twitter. The corresponding security rules for
    this app are available in this gist: https://gist.github.com/sararob/8694d5b4111e4ed31cec */

    // Define Firebase references
    var ref = new Firebase("<your-firebase>.firebaseio.com/");
    var usersRef = ref.child("users");
    @@ -10,7 +14,7 @@ $('#login').on("click", function () {
    // Authenticate users and store each user in Firebase by their Twitter UID
    var auth = new FirebaseSimpleLogin(ref, function (error, user) {
    if (error) {
    console.log(error);
    console.log(error);
    } else if (user) {
    usersRef.child(user.uid).set({pic: user.thirdPartyUserData.profile_image_url, username: user.username});
    } else {
  17. sararob revised this gist Sep 2, 2014. 1 changed file with 10 additions and 11 deletions.
    21 changes: 10 additions & 11 deletions role-based-security.js
    Original file line number Diff line number Diff line change
    @@ -1,20 +1,19 @@
    // Define Firebase references

    var ref = new Firebase("<your-firebase>.firebaseio.com/");
    var usersRef = ref.child("users");

    // Call an 'auth' function when a user clicks a login button (this example uses twitter)
    $('#login').on("click", function () {
    auth.login('twitter');
    });
    $('#login').on("click", function () {
    auth.login('twitter');
    });

    // Authenticate users and store each user in Firebase by their Twitter UID
    var auth = new FirebaseSimpleLogin(ref, function (error, user) {
    if (error) {
    console.log(error);
    }
    else if (user) {
    usersRef.child(user.uid).set({pic: user.thirdPartyUserData.profile_image_url, username: user.username});
    } else {
    }
    if (error) {
    console.log(error);
    } else if (user) {
    usersRef.child(user.uid).set({pic: user.thirdPartyUserData.profile_image_url, username: user.username});
    } else {
    //user is logged out
    }
    });
  18. sararob renamed this gist Sep 2, 2014. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  19. sararob created this gist Sep 2, 2014.
    20 changes: 20 additions & 0 deletions role-based-security
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,20 @@
    // Define Firebase references

    var ref = new Firebase("<your-firebase>.firebaseio.com/");
    var usersRef = ref.child("users");

    // Call an 'auth' function when a user clicks a login button (this example uses twitter)
    $('#login').on("click", function () {
    auth.login('twitter');
    });

    // Authenticate users and store each user in Firebase by their Twitter UID
    var auth = new FirebaseSimpleLogin(ref, function (error, user) {
    if (error) {
    console.log(error);
    }
    else if (user) {
    usersRef.child(user.uid).set({pic: user.thirdPartyUserData.profile_image_url, username: user.username});
    } else {
    }
    });