2013-04-08 58 views
0

我遇到了一个奇怪的问题,使用Rolify(点击教程我跟着)Rails:can方法似乎不起作用,因此呈现用户权限不可用。以下是我的ability.rb文件和控制台输出,其中显示了问题。Rolify异常返回false

class Ability 
    include CanCan::Ability 

    def initialize(user) 

    user ||= User.new # guest user (not logged in) 

    if user.has_role? :admin 
     can :manage, :all 
    else 
     can :read, :all 
    end 

    end 
end 

控制台测试($ rails console

user = User.find(2) 
user.add_role "admin" 
user.has_role? :admin 
=> **true** 

ability = Ability.new(user) 
ability.can? :manage, :all 
=> **false** 
ability.can? :read, :all 
=> **false** 

我还检查在数据库中,所有的关系的设置是否正确。我正在运行rails 3.2.13。

+0

当您测试'ability.can?'时,您是否尝试过传递实际模型或模型类而不是':all'? – PinnyM 2013-04-08 22:00:53

回答

1

问题是与canarddeclarative_authorization的宝石冲突。禁用并重新启动rails服务器解决了这个问题。也许这会帮助其他人尝试这些不同的宝石走上同样的道路。

0

CanCan依赖于current_user方法的存在,它将返回当前登录的用户。如果您使用例如设计进行身份验证,则此方法在那里。如果你正在使用别的东西,那么你必须确保current_user方法在那里。