Aqui está um exemplo disso: Discourse Video Upload Plugin with YouTube and Vimeo
Há um campo access_control_post_id no modelo de uploads.
Minha aposta é que, se você deseja permissões granulares para uploads, economizará muito tempo usando o código S3 existente — especialmente se nomes de arquivos obscuros não forem suficientes. Nesse caso, você basicamente precisaria criar um sistema inteiro de permissões para onde for armazenar os arquivos. Ou talvez eu apenas não esteja entendendo.