Имхо, вы напрасно смешиваете публичные картинки и картинки пользователей. У одних должна быть проверка прав, другим она не нужна, то есть нужно их гнать через немного разные точки входа, а то и вообще через разные механизмы и разные хранилища.
проверкой прав занимается приложение в зависимости от ресурса, в котором находятся картинки(точнее их идентификаторы). Соответственно если для ресурса нужна проверка прав - приложение это проверит, если не нужна - не проверит.
Суть именно в том, чтобы отделить файлы сами по себе от конкретных ресурсов, в которых они используются.
Т.е. в контексте загрузки файлов - картинка - это файл, у неё есть там расширение, оригинальное имя и т.п.
В контексте подачи заявления куда-нибудь, например, файл - это паспорт в виде идентификатора, ссылающегося на файл.