Domanda

modello di utente molto semplice, vorrei che l'utente admin di: gestire tutti

altro può non: indice, utente e alcune altre opzioni, ma quando provo e bloccare gli utenti non di admin di visualizzare l'indice utente, l'utente admin non ha accesso.

Questo è il mio ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new #guest user

    can :manage, :all if user.role == "admin" #if user.admin? can :manage, :all
    can :assign_role, User 

    else
      can :read, :all
      can :create, User


      cannot :assign_role, User
      cannot :index, User

      can [:show, :edit, :update], User do |current_user|
              user.id == current_user.id || user.role == "admin"
            end



  end
end

Che cosa posso fare per fermare tutti gli utenti di essere bloccato dall'indice utente?

Saluti

Dan

È stato utile?

Soluzione

Qualcosa non va con if-else nel codice.

if user.role == "admin"
  can :manage, :all
  can :assign_role, User 

else
  can :read, :all
  can :create, User


  cannot :assign_role, User
  cannot :index, User
  can [:show, :edit, :update], User do |current_user|
    user.id == current_user.id || user.role == "admin"
  end

end

E anche non devi negare utente non-admin al ruolo assegnare ovviamente (non può: assign_role, User).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top