Как я могу использовать декларативную авторизацию, не сохраняя идентификатор пользователя в качестве параметра в URL? - PullRequest
2 голосов
/ 13 июля 2010

Для декларативной авторизации требуется, чтобы params [: id] выполнял ее проверку, и я хочу использовать пути, такие как / profile и / dashboard, где пользователь хранится в сеансе, а не URL.Но это ломается.Любые идеи о том, как я могу сделать это, не взломав сам драгоценный камень?

Ответы [ 4 ]

3 голосов
/ 13 июля 2010

Кажется, декларативное разрешение требовать params [: id], чтобы сделать его проверка

Это верно только в том случае, если вы используете filter_resource_access для установки переменных экземпляра в контроллере. Вы можете настроить собственную схему авторизации, указав filter_access_to. Это позволяет вам устанавливать свои собственные пользовательские методы, которые могут основываться на чем угодно - переменных сеанса, атрибутах модели и т. Д.

Раздел контроллера в этом введении объясняет filter_access_to и дает несколько примеров.

1 голос
/ 13 июля 2010

Если у вас есть пользователи в вашем приложении, почему бы не использовать плагин аутентификации?Я использую Restful-аутентификацию, и после небольшой работы у меня есть полное управление сессиями.Для вашей проблемы у этого плагина есть вспомогательный метод current_user, который извлекает пользователя с открытым сеансом.

Я думаю, что лучше полагаться на плагины, такие как Restful Authentication (или AuthLogic, как ответ № 1), чем реализовывать ваше решениено вы будете лучше знать свои потребности;)

0 голосов
/ 13 июля 2010

Используйте devise , чтобы вы могли получить метод current_user.

Используйте filter_access_to вместо filter_resource_access.

0 голосов
/ 13 июля 2010

Я использую AuthLogic, но, насколько я знаю, «current_user» не будет доступен через маршрут.

Вам необходимо проверить в контроллере, если params [: id] ==«current_user» (в виде строки), а затем выполнить некоторую логику, основанную на этом ... т.е.получить current_user из пользовательского маршрута.Вы также можете просто сопоставить именованный маршрут для current_user с его собственным действием контроллера, но это не очень RESTful и [скорее всего] дублирует функциональность, которую вы уже имеете.

...