Changed where the permissions check occurs in the sync, so that it takes place before syncing vector data, and then added a check to see if they're are any unsynced features for a read only schema to decide whether to throw an error or not. If there aren't any features to upload, then a read only layer shouldn't throw an error