0

Я прочитал In firebase, can I set permissions to allow only PUSH operations to a given object? и до сих пор скопировал его, но он не работает.Firebase: запретить все, кроме .push к списку

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

Угловое 2, с AngularFire2

export class FirebaseService { 

    comments: FirebaseListObservable<Object>; 
    locations: FirebaseListObservable<Object>; 

    constructor(private af: AngularFire) { 
     this.comments = this.af.database.list(environment.stem + '/comments');  
    } 

    addComment(comment) { 
    return this.comments.push(comment) 
     .catch(err => console.error(err)); 
    } 
} 

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

{ 
    "rules": { 
    ".read": true, 
    ".write": "!data.exists()" 
    } 
} 

Установка правила записи в true делает его работу, но слабее, чем я хочу.

Вот начало существующего JSON в этом маршруте базы данных (ключи здесь приходят от службы Я проникаю от)

{ 
    "0763a8d3e2407697" : { 
    "comment" : "Thanks for your comments and feedback, Simon", 
    "date" : "Sat Jan 03 2015 08:46:17 GMT+0100 (CET)" 
    },... 
+0

Можете ли вы добавить код для операции, которую вы хотите разрешить * и * код для операции, которую вы хотите отклонить? Также, пожалуйста, добавьте существующий JSON на место (в виде текста, без скриншотов). –

+0

@FrankvanPuffelen См. Обновленный вопрос –

ответ

1

С текущими правилами, сервер базы данных будет отвергать писать при любых данных в базе данных.

Но ваш случай использования, похоже, хочет отклонить запись, чтобы переписать определенный существующий комментарий. Для этого потребительной случае, вы должны поставить .write правило ниже в дерево:

{ 
    "rules": { 
    ".read": true, 
    "$stemid": { 
     "comments": { 
     "$commentid": { 
      ".write": "!data.exists() && newData.exists()" 
     } 
     } 
    } 
    } 
} 

Эти правила use $ variables, чтобы гарантировать, что они действуют во всех стеблей и все комментарии.

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