Reputation: 1267
I am using gem 'devise'
and 'cancancan'
for defining many roles per user. problem is when I run rails server its says undefined method admin?
in application_controller.rb file:
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:roles) }
end
in user.rb file :
ROLES = %i[admin author]
def roles=(roles)
roles = [*roles].map { |r| r.to_sym }
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.inject(0, :+)
end
def roles
ROLES.reject do |r|
((roles_mask.to_i || 0) & 2**ROLES.index(r)).zero?
end
end
def has_role?(role)
roles.include?(role)
end
in ability.rb file :
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
any idea ??
Upvotes: 1
Views: 3507
Reputation: 3268
Please add method admin? to the user.rb
def admin?
self.roles.include?(:admin)
end
or try to call has_role?(:admin) from the ability.rb file.
Upvotes: 1
Reputation: 106872
Your User
model doesn't have an admin?
method. Instead it provides a has_role?
method. So instead of user.admin?
write in your ability.rb
:
user.has_role?(:admin)
An other option is add an admin?
method to your User
model:
def admin?
has_role?(:admin)
end
Upvotes: 2