Мне нужно реализовать мелкозернистый контроль доступа в приложении Ruby on Rails. Разрешения для отдельных пользователей сохраняются в таблице базы данных, и я думал, что было бы лучше, чтобы соответствующий ресурс (например, экземпляр модели) решил, разрешено ли определенному пользователю читать или записывать на него. Принимая это решение в контроллере каждый раз, конечно, не было бы очень СУХОЙ.
Проблема в том, что для этого модель нуждается в доступе к текущему пользователю, чтобы вызвать что-то вроде
. Тем не менее, модели вообще не имеют доступа к данным сеанса.may_read
? (current_user
, attribute_name
)
Есть несколько предложений по сохранению ссылки на текущего пользователя в текущем потоке, например. в этот пост в блоге. Это, безусловно, решит проблему.
Соседние результаты Google посоветовали мне сохранить ссылку на текущего пользователя в классе User, хотя, по-моему, это был придуман кем-то, чье приложение не должно вмещать много пользователей одновременно.;)
Короче говоря, я чувствую, что мое желание получить доступ к текущему пользователю (т.е. данные сеанса) изнутри модели происходит от меня делает это неправильно.
Можете ли вы рассказать мне, как я ошибаюсь?