我正在开发一个Rails应用程序,设计、设置和处理所有默认设置,并且正在设置CanCan。
以下是“能力”类的内容(实际上不是我的代码,基于几个教程);
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user_signed_in?
can :manage, :all
end
end
end
我知道该文件本身可以工作,因为我已经向我的一个控制器添加了一个示例authorize! :edit, @document
。如果我移除if user_signed_in?
行(当然还有end
),那么当can :manage, :all
行出现时,我可以访问document
控制器的操作,没有它,它就表示“拒绝访问”。
但是,当我尝试使用user_signed_in?
行进行此操作时,我会得到以下错误;
NoMethodError in DocumentsController#edit 未定义方法`user_signed_in?‘为#
有趣的是,user_signed_in?
在我的视图中工作得很好,在这里我会显示一个登录框或当前使用if
. else
块登录的用户的详细信息。
有什么办法可以在这里访问user_signed_in?
吗?从长远来看,我打算从用户的记录中读取一个值来识别他们的访问级别,但是重要的是,这个概念是可行的,因为变量将来自同一个地方!
谢谢!
发布于 2013-06-15 18:24:09
我不清楚您到底要做什么,但是可以将Devise::Controllers::Helpers
包含到Ability
类中,然后用signed_in?(:user)
替换user_signed_in?
。
https://stackoverflow.com/questions/17126490
复制相似问题