Декларативная авторизация и не работает if_attribute - PullRequest
5 голосов
/ 07 июня 2010

У меня были почти те же проблемы, что и Виктор Мартин (вы можете увидеть вопросы, задаваемые здесь).

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

has_permission_on :users, :to => [:edit, :update, :destroy] do
if_attribute :user => is { current_user }
end

Есть ли какие-либо распространенные подводные камни с декларативным разрешением? Я использую authlogic и подозреваю, что источником проблемы может быть метод current_user в контроллере приложения.

Ответы [ 2 ]

4 голосов
/ 27 августа 2010

Обратите внимание, что если вы используете «filter_access_to» в своих контроллерах, вам необходимо убедиться, что у вас есть «: attribute_check => true».Без этого условные объявления if_attribute ничего не делают.

Подробнее об этом в документах декларативного разрешения

1 голос
/ 07 июня 2010

Вам нужно добавить это в свой ApplicationController, если вы этого еще не сделали:

before_filter :set_current_user
protected
def set_current_user
  Authorization.current_user = current_user
end

Тогда ваши правила будут выглядеть так:

has_permission_on :users, :to => [:edit, :update, :destroy] do
  if_attribute :user => is { user }
end

Насколько я знаю, Declarative_authorization не вызывает никаких методов в контроллере и не знает, что означает current_user в вашем примере, но дает вам экземпляр Authorization.current_user с именем user, который вы можете использовать. в вашем authorization_rules.rb файле.

...