2013-10-04 2 views
2

Как настроить мои правила безопасности, чтобы только пользователи с users/$provider/$user/admin == true могли добавлять и удалять новых администраторов.Правила безопасности для пользователей Admin

Вот мои Firebase правила:

{ 
    "rules": {  
    "users": { 
     "$provider": { 
     "$user": { 
      "profile": { 
      ".read": "$user == auth.id && $provider == auth.provider", 
      ".write": "$user == auth.id && $provider == auth.provider" 
      }, 
      "admin": { 
      ".read": false, 
      ".write": false 
      } 
     } 
     } 
    }, 
    "blogs": { 
     ".read": true, 
     ".write": "root.child('users').child(auth.provider).child(auth.id).child('admin').val() == true", 
     "$blog": { 
     ".validate": "newData.hasChildren(['article', 'time', 'title'])" 
     } 
    } 
    } 
} 

Мой другой вопрос, могу ли я смешивать auth.id из разных auth.provider, они уникальны? Я хочу, чтобы "$provider": {} в иерархии пользователей был немного уродлив.

+0

У нас есть функция, которая может помочь в предоставлении уникальных идентификаторов для всех поставщиков. Если у вас есть момент, напишите мне по электронной почте [email protected] - нам понравится обратная связь! –

ответ

3

Я надеюсь, что я правильно понимаю, что вам нужно:

{ 
    "rules": {  
    "users": { 
    "$provider": { 
     "$user": { 
     "profile": { 
      ".read": "$user == auth.id && $provider == auth.provider", 
      ".write": "$user == auth.id && $provider == auth.provider" 
     }, 
     "admin": { 
      ".read": "auth.admin == true", 
      ".write": "auth.admin == true" 
     } 
     } 
    } 
    }, 
    "blogs": { 
    ".read": true, 
    ".write": "root.child('users').child(auth.provider).child(auth.id).child('admin').val() == true", 
    "$blog": { 
     ".validate": "newData.hasChildren(['article', 'time', 'title'])" 
    } 
    } 
    } 
} 

На второй вопрос я не думаю, что вам нужно, чтобы сохранить поставщика на всех, так как если пользователь loggs в с другого провайдера должно быть принято в качестве новый пользователь, если firebase действительно отслеживает единственным, что уникальные и стойкие среди логинов, который является электронной почтой, и я очень сомневаюсь, что они делают. Моя 99% уверенная ставка заключается в том, что auth.id меняется, когда провайдеры авторизации переключаются, но это совсем не сложно проверить?

0

В то время как атрибут id является идентификатором указанного поставщика, uid является уникальным для всех поставщиков и предназначен как правильный индекс для ваших пользователей, особенно если вы используете сразу несколько поставщиков.

Примечание: Firebase обновили свои API, чтобы больше не возвращаться простым, поставщик конкретных id атрибута в правилах безопасности auth переменных для клиентских версий библиотеки 1.1.0 или более поздней версии (выпущено 3 октября 2014).

Смежные вопросы