Я пытаюсь написать правила безопасности для Firebase.У меня постоянно возникает проблема с проверкой, является ли пользователь администратором или нет.
Пользователь может получать доступ только к своим собственным данным, а администратор может удалять пользователей вместе с их заметками и контактами.
match /users/{userId} {
allow read: if isSignedIn();
allow update: if request.auth.uid == userId || isAppAdmin() || isOrganisationAdmin();
allow create, delete: if isAppAdmin() || isOrganisationAdmin();
}
match /contacts/{contactId} {
allow read: if isSignedIn();
allow create: if isSignedIn() && incomingData().uid == request.auth.uid;
allow delete: if existingData().uid == request.auth.uid || isAppAdmin() ||
getOrganisationData(getUserData().organisationId).adminId == request.auth.uid;
allow update: if isSignedIn() && existingData().uid == request.auth.uid;
}
match /notes/{noteId} {
allow read: if isSignedIn();
allow create: if isSignedIn() && incomingData().uid == request.auth.uid;
allow delete: if existingData().uid == request.auth.uid || isAppAdmin() ||
getOrganisationData(getUserData().organisationId).adminId == request.auth.uid;
allow update: if isSignedIn() && existingData().uid == request.auth.uid;
}
// Functions //
function isSignedIn() {
return request.auth != null;
}
function isOrganisationAdmin() {
return getOrganisationData(getUserData().organisationId).adminId == request.auth.uid;
}
function isAppAdmin() {
return request.auth.token.email == 'travelnoteshh@gmail.com';
}
function getUserData() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data;
}
function getOrganisationData(organisationId) {
return get(/databases/$(database)/documents/organisations/$(organisationId)).data;
}
Я уже считаю, что что-то не так с функцией isOrganisationAdmin (), потому что функция isAppAdmin () работает.Может кто-нибудь помочь, пожалуйста?