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