Получение .read и .write Правила безопасности для работы для групп

Мне сложно писать правила безопасности для создания командной платформы для совместной работы.

  • Когда пользователь регистрируется, они должны иметь возможность создать команду и пригласить пользователей в эту команду.
  • Проекты должны принадлежать команде.
  • Только пользователи из этой группы должны иметь возможность просматривать этот проект.
  • Пользователи должны видеть только команды, в которых они входят.

Как мне написать правила безопасности .read, чтобы пользователи могли видеть информацию только от команд, в которых они находятся?

Мне нужно получить только две команды, потому что я принадлежу им github: 8272012.

Текущие правила безопасности:

{
    "rules": {
        ".read": true, 
        "users": {
          "$user": {
            //can add a message if authenticated
            ".write": "auth.uid === $user" 
          }
        }, 
        "teams": {
            "$team": {
                "users": {
                    // can write to the users list only if ADMINISTRATOR
                    "$user": {
                        ".write":"newData.parent().child(auth.uid).val() === 99"
                    }
                }
            }
        },
        "projects": {
          "$team": {
            "$project": { 
                //can add a message if they are a MEMBER
                ".write": "(!data.exists() && newData.exists() && root.child('teams/' + $team + '/users/' + auth.uid).val() >= 10)"
            }
          }
        }
    }
}

Мне нужно получить только две команды, потому что я принадлежу им github:8272012.

введите описание изображения здесь

введите описание изображения здесь

Ответ 1

Следующие правила безопасности предоставят доступ для чтения и записи для проекта только тем пользователям, которые находятся в этой команде проекта (при условии, что вы добавили /projects node для каждого пользователя, чтобы указать, к каким проектам, к которым пользователь имеет доступ):

"rules": {
  "projects": {
    "$project": {
      ".read": "root.child('users').child(auth.uid).child('projects').val().child($project).exists()" ,
      ".write": "root.child('users').child(auth.uid).child('projects').val().child($project).exists()" 
    }
  }
}

Я не могу видеть, какие данные вы сохраняете для каждого проекта, но если вы храните ссылку на команду проекта, вы также можете использовать ее в своих правилах безопасности.