2016-12-16 3 views
0

Je souhaite que admin puisse définir un autre utilisateur sur admin/manager en modifiant la colonne de rôle dans la base de données. J'essaie d'utiliser cancancan gem pour le faire mais rien ne se passe.Comment autoriser uniquement la colonne de rôle de mise à jour d'admin dans la table utilisateur avec cancancan?

Comment est-ce que je peux faire ceci?

ability.rb

def initialize(user) 
    user ||= User.new 
    if user.admin? 
    can [:create, :update, :destroy], [Organization, Club, User] 
    elsif user.manager? 
    can [:create, :update, :destroy], [User, Event, News, User_club, User_event] 
    can :update, Club 
    can :read, :all 
    cannot :update, user.role 
    else 
    can :read, :all 
    can :create, User 
    can :update, User, user_id: user.id 
    cannot :update, user.role 
    end 
end 

edit.html.erb

<% if can? :update, @user.role %> 
    <%= f.label :role %> 
    <%= f.number_field :role, class: "form-control" %> 
<% end %> 

Répondre

0

Vous essayez this

class Ability 
    include CanCan::Ability 
    def initialize(user) 
    can :read, :all     # allow everyone to read everything 
    if user && user.admin? 
     can :access, :rails_admin  # only allow admin users to access Rails Admin 
     can :dashboard     # allow access to dashboard 
     if user.role? :superadmin 
     can :manage, :all    # allow superadmins to do anything 
     elsif user.role? :manager 
     can :manage, [User, Product] # allow managers to do anything to products and users 
     elsif user.role? :sales 
     can :update, Product, :hidden => false # allow sales to only update visible products 
     end 
    end 
    end 
end