我无法理解我错过了什么。
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
can :read, Post
end
end
post_controller.rb
class PostController < ApplicationController
before_filter :authenticate_user!
def index
@posts = Post.all
authorize! :read, @posts
end
end
index.html.haml
- if can? :read, @posts
you can!
- else
you cannot!
使用此代码,我总是得到CanCan::AccessDenied in PostController#index
例外。它说#8行authorize! :read, @posts
1
如果我像这样更改post_controller.rb
中的代码:
post_controller.rb
class PostController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource
def index
@posts = Post.all
end
end
异常消失了,但我从我的观点中得到you cannot!
。我希望得到you can!
消息。
2。如果我在 ability.rb 中将can :read, Post
更改为can :read, :all
,我会按预期收到you can!
条消息。但这不是我想要使用的。
这里有什么问题?
答案 0 :(得分:3)
实际上,您使用can :read, Post
或在循环can :read, post
时使用@posts
。
中间没有。
顺便说一句,如果您使用load_and_authorize_resource
,则无需添加@posts = Post.all
。
它们会自动加载。
PS:你为什么要检查你的控制器和你的视图?