А если речь идёт о файлах, которыми пользователь мог поделиться с ограниченным числом других пользователей, то можно так
upd: после реоргазинации базы данных, перед тем как решить, дать скачать файл или нет, сначала обрабатываете данные пользователя, запросившего файл, потом ищите его в списке тех, с кем файлом поделились, затем - ссылку на файл, если пользователь в том списке (это обычный запрос к таблице shared_file) либо сообщение об ошибке