Я пытаюсь скрыть все идентификаторы, которые покидают сервер, т. Е. Идентификаторы, появляющиеся в URL и в выводе HTML.
Я написал простую библиотеку Base62, в которой есть методы кодирования и декодирования. Определение или, что лучше, перезапись метода id в ActiveRecord для возврата закодированной версии id и настройка контроллера для загрузки ресурса с декодированным params[:id]
дает мне желаемый результат. Идентификаторы теперь в кодировке base62, а в ответе отображается правильный ресурс.
Теперь я начал замечать, что субресурсы, определенные через has_many
отношения, не загружаются. например У меня есть запись под названием User
, что has_many
Post
s. Теперь User.find(1).posts
пусто, хотя есть сообщения с user_id = 1
. Мое объяснение состоит в том, что ActiveRecord должен сравнивать user_id
из Post
с методом id
из User
- который я перезаписал - вместо сравнения с self[:id]
. Так что в основном это делает мой подход бесполезным.
Я хотел бы иметь что-то вроде определения obfuscates_id
в модели, и об остальном позаботится, т. Е. Выполнить все кодирование / декодирование в соответствующих местах и не допустить, чтобы идентификаторы были возвращены сервером .
Есть ли доступный драгоценный камень или у кого-нибудь есть подсказка, как это сделать? Могу поспорить, я не первый, кто пытается это сделать.