Aquí tienes un ejemplo de eso: Discourse Video Upload Plugin with YouTube and Vimeo
Hay un campo access_control_post_id en el modelo de archivos subidos.
Mi suposición es que si deseas permisos detallados para los archivos subidos, ahorrarás mucho tiempo utilizando el código S3 que ya existe, especialmente si los nombres de archivo poco comunes no son suficientes. En ese caso, básicamente necesitarías escribir un sistema de permisos completo para donde vayas a almacenar los archivos. O tal vez simplemente no lo entiendo.