Может ли разница между: read и [: index,: show]? - PullRequest
10 голосов
/ 12 марта 2011

Согласно всей документации, действие :read имеет псевдоним для :index и :show:

alias_action :index, show, :to => :read

Однако рассмотрим следующий сценарий с вложенными ресурсами:

resources :posts
  resources :comments
end

Если я определю способности следующим образом:

# ability.rb
can :read, Post
can :show, Comment

# comments_controller.rb
load_and_authorize_resource :organization, :find_by => :permalink
load_and_authorize_resource :membership, :through => :organization

все будет работать как положено.Однако, если я изменю действие :read на [: index,: show]:

# ability.rb
can [:index, :show], Post
can :show, Comment

# comments_controller.rb
load_and_authorize_resource :organization, :find_by => :permalink
load_and_authorize_resource :membership, :through => :organization

Я не авторизован для доступа к /posts/:post_id/comments, /posts/:post_id/comments/:id и т. Д. Я по-прежнему могу получить доступ:index и :show для posts_controller.

Как возможно, что эти действия являются "псевдонимами", если они ведут себя по-разному?

В своей игре я также натолкнулся на следующее.Изменение load_and_authorize_resource на следующий разрешенный доступ:

# ability.rb
can [:index, :show], Post
can :show, Comment

# comments_controller.rb
load__resource :organization, :find_by => :permalink
load_and_authorize_resource :membership, :through => :organization

Может кто-нибудь объяснить, что здесь происходит?

1 Ответ

16 голосов
/ 12 марта 2011

Я опубликовал это как проблему на GitHub.Райан ответил следующим образом:

Оба действия :index и :show указывают на действие :read.Но когда CanCan авторизует родительский ресурс, он напрямую использует действие :read, поэтому вы наблюдаете это поведение.

Я думаю, что это вызывало путаницу раньше, поэтому я изменю внутреннее поведение, чтобы никогда не использовать:read действие напрямую.Вместо ресурса :parent я заменю его на :show, а по умолчанию accessible_by я буду использовать :index вместо :read.Спасибо, что обратили на это мое внимание.

https://github.com/ryanb/cancan/issues/302#comment_863142

...