Согласно всей документации, действие :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
Может кто-нибудь объяснить, что здесь происходит?