Question

I'm experiencing a strange issue using Rolify (click for tutorial I'm following) with Rails: The can method does not seem to work, therefore rendering user privileges unuseable. Below is my ability.rb file and console output where the problem is demonstrated.

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

Console tests ($ 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**

I also checked in the database and all the relationships are set up correctly. I'm running rails 3.2.13.

Was it helpful?

Solution

The problem was a gem conflict with either canard or declarative_authorization. Disabling both and restarting the rails server solved the issue. Perhaps this will help others who have gone down the same path in trying these different gems.

OTHER TIPS

CanCan relies on existence of current_user method which would return currently logged in user. This method is there if you are you using for example devise to authenticate. If you are using something else then you have to make sure current_user method is there.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top