Firebase - Cloud Firestore, Проблемы при создании правила для администратора - PullRequest
0 голосов
/ 18 октября 2018

У меня проблема с созданием правил Firebase, я создал поле «роль» в своей коллекции «сотрудников», поэтому я хочу различать каждый тип пользователей, которым разрешено чтение / запись и т. Д. В БД.Моя проблема в том, что по какой-то причине я не могу проверить, действительно ли пользователь, пытающийся прочитать чужую информацию, является администратором, в функции «isAdministrator» я не могу заставить работать get:

service cloud.firestore {

	// Function: Check if an authenticated employee is admin
	function isAdministrator(){
  	//return get(/databases/$(database)/documents/employees/$(request.auth.uid)).data.role == 'admin' 
			//	|| get(/databases/$(database)/documents/employees/$(request.auth.uid)).role == 'admin';
		return false;
    // (data.child('role').val() == 'admin')
  }
  
  // Function: Check if an employee is authenticated
  // RULES
	match /databases/{database}/documents {
		// Allows only admins and 'owner' to acess his document
		match /employees/{document=**} {
    	allow read, write, update: if request.auth.uid == resource.data.uid || isAdministrator();
      allow create, delete, list: if isAdministrator();
    }
  }
}

Вот так выглядит моя коллекция:

Employees collection with roles

1 Ответ

0 голосов
/ 19 октября 2018

match / database / {database} / документы должны обернуть все, включая функцию, например:

service cloud.firestore {
    match /databases/{database}/documents {
    // FUNCTIONS
    // Function: Check if an authenticated employee is admin
    function isAdministrator(){
        return get(/databases/$(database)/documents/employees/$(request.auth.uid)).data.role == 'admin' 
                    || get(/databases/$(database)/documents/employees/$(request.auth.uid)).role == 'admin';
    }
    // RULES
    // Allows only admins and 'owner' to acess his document
    match /employees/{document=**} {
        allow read, write, update: if request.auth.uid == resource.data.uid || isAdministrator();
        allow create, delete, list: if isAdministrator();
    }
  }
}
...