Лучшая практика Rails current_user - PullRequest
2 голосов
/ 22 марта 2012

У меня дилемма, у меня есть тонна объектов, связанных с current_user в моем приложении. И я не знаю, если в моих контроллерах я продолжаю использовать идентификаторы для поиска этих объектов или помещаю непосредственно объект current_user +.

Exemple:

class HousesController < ApplicationController

 def show
      @house = House.find(params[:id]) **or?** @house = current_user.house 
    end

 def edit
      @house = House.find(params[:id]) **or?** @house = current_user.house 
    end
end

И это продолжается и продолжается. заранее спасибо

1 Ответ

4 голосов
/ 22 марта 2012

Если вы используете House.find(params[:id]), у вас есть потенциальная дыра в безопасности, поскольку данный пользователь может просто изменить номер в URL и получить доступ к дому для другого пользователя.Так что, если вы идете по этому пути, вы должны добавить что-то, чтобы защитить несанкционированный доступ.

OTOH, current_user.house хранит их отдельно, но нуждается в альтернативном коде для функций администратора.

Для простых приложений вы можете сделать это вручную, но для более крупных приложений вы можетеЯ хочу рассмотреть структуры авторизации, такие как cancan или Declarative_authorization , где вы можете легче определить разрешения.

Я использую decl_auth сам, и все мои контроллеры либо используют его методзагрузки ресурса с помощью filter_resource_access (загружает соответствующий ресурс или броски и ошибки, если это не разрешено) или вручную с помощью House.with_permissions_to(:index), который даст мне дом только при наличии разрешения на его загрузку.

КакRailscasts всегда говорит это лучше всего: cancan и декларативное разрешение .

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