我正在尝试在我的rails3 + mongoid应用程序中使用具有CanCan角色的Devise授权。 现在我必须限制用户编辑事件的权限,因此只有他们的作者可以这样做。该事件的作者由该行确定:
<%= f.hidden_field (:author, :value =>current_user.email) %>
所以,现在在CanCan的Ability文件中我正在尝试使用这段代码:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.role? :admin
can :manage, :all
else
can :read, :all
end
if
user.role?(:normal)
can :create, Event
can :update, Event do |event|
event.try(:author) == current_user.email
end
can :create, Comment
can :update, Comment do |comment|
comment.try(:author) == current_user.email
end
end
end
端
但这导致了我的错误:
未定义的局部变量或方法`current_user'用于#
然后我试图改变
can :update, Event do |event|
event.try(:author) == current_user.email
到
event.try(:author) == Devise.current_user.email
但是会出现此错误
Devise的未定义方法`current_user':模块
那么,我应该怎么做以及如何从ability.rb中调用`current_user'方法?提前感谢您的任何提示。
答案 0 :(得分:6)
为什么在初始化方法中引用current_user
?为什么不只是作为方法参数提供的user
?
CanCan会在需要时调用current_user的初始化。