Как сделать функцию Share, как в Dropbox?
Очень странная модель выбрана, но... Каждому свое )
По поводу вопроса, то для Вас только 1 вариант это создание временной папки для каждого расшаренного файла из которой будете отдавать файлы без авторизации.
p.s.. Минусов Вашей схемы очень много. Например:
- как Вы будете бороться с дублированием файлов у пользователей? 
- Масштабирование файлов одного пользователя по разным серверам?
- масштабировать активные и старые файлы по серверам в зависимости от нагрузки на канал..
Всё дело в том, что физическое размещение файлов на сервере не обязано соответствовать паттерну урлов, которые будет видеть пользователь.userfiles - это вполне может быть виртуальный путь (location в терминах nginx)
Тогда легче будет сконструировать путь для шаринга.
На сервере структура файлов может быть
 - files - адрес хранилища
 - - adc/dcf - папка, имя которой сконструированно из имени файла
 - - - adcf832dnewjernrr43n5.png - имя файла в хранилище
Параллельно вам потребуется БД для хранения связей
adcf832dnewjernrr43n5 -> Origin file name | Size | Access date | Owner user | smth else
После этого вы средствами приложения сможете /userfiles/akaldygulov@gmail.com/Pretty_image.png
перенаправлять на/files/adc/dcf/adcf832dnewjernrr43n5.png/share/adcf832dnewjernrr43n5/Pretty_image.png
проверять доступ и снова перенаправлять на/files/adc/dcf/adcf832dnewjernrr43n5.png