Генерация секретных URL для ресурса в рельсах - PullRequest
0 голосов
/ 19 марта 2012

Я создал приложение для управления задачами, которое состоит из lists и tasks. Пользователи могут просматривать только свои собственные списки и задачи. Я хотел бы добавить возможность для пользователя поделиться list, если он хочет. Вот шаги, которые я хотел бы выполнить:

  1. Пользователь щелкает ссылку из / list / show, чтобы поделиться списком
  2. Пользователь получает секретный URL-адрес для обмена: myapp.com/lists/1/23534512345234523 или любой другой.
  3. Секретный URL перенаправляет на просмотр, отличный от / lists / show. Что-то вроде / lists / 1/23534512345234523, которое будет перенаправлено в / lists / secret_show или whatev.
  4. Только пользователи, имеющие этот URL, могут видеть информацию на этой странице.

Надеюсь, что это имеет смысл. Я полагаю, мне нужно обновить запись list уникальным токеном для list.token. Тогда я бы кое-как получил входящий URL и через новое действие

# список secret_share

def secret_share
 ...
end

Где я отфильтровал запись списка по list.token и направил на secret_share. Тогда, возможно, в представлении я мог бы просто ограничить представление присутствием токена в URL.

Мысли

1 Ответ

0 голосов
/ 19 марта 2012

Какой бы «секретный URL» вы ни раздали, он не должен перенаправлять на реальный URL, иначе вы создадите всевозможные возможности для утечки информации. Это должен быть строго альтернативный URL.

Использование маршрутизации для этого кажется хорошей идеей вместо использования отдельного контроллера. В вашем маршруте вы можете передать дополнительный параметр, чтобы указать, что это «секретный» URL-адрес, например :secret => true, где рассматриваемое значение не может быть передано пользователем для фальсификации. Например, пользовательские параметры всегда являются строками, поэтому безопасным вариантом может быть использование true.

Этот специальный параметр может отключить проверку доступа на вашем контроллере, чтобы страницы могли просматривать люди, которые обычно не имеют доступа. Вы также можете показать другой макет, используя метод layout в вашем контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...