Вот пример того, как это работает: Discourse Video Upload Plugin with YouTube and Vimeo
В модели загрузок есть поле access_control_post_id.
Мне кажется, что если вам нужны детальные права доступа к загрузкам, то использование существующего кода для S3 сэкономит вам много времени — особенно если просто скрытых имён файлов недостаточно. В таком случае вам, по сути, придётся написать целую систему прав доступа для того места, где вы планируете хранить файлы. Или, возможно, я просто что-то не понимаю.