Question

J'utilise donc STI pour incorporer certains rôles dans la table de mon utilisateur. En ce moment, j'ai juste des utilisateurs et des administrateurs normaux. J'ai installé Rails_admin et j'ai besoin d'un moyen d'authentifier les administrateurs, mais je ne sais pas comment le faire en toute sécurité.

En ce moment, j'ai ce code dans mon contrôleur d'application

def authenticate_admin!(opts={})
  current_admin || redirect_to(?)
end

def current_admin
  current_user if current_user.is_a? Admin
end

Dans mon fichier rails_admin.rb, j'ai ceci

config.authenticate_with do
 authenticate_admin!
end

Mon problème actuel est que je ne peux pas faire dire que le redirect_to vers quoi que ce soit. Je continue d'obtenir des erreurs. Est également une simple redirection si l'utilisateur n'est pas un administrateur tout ce dont j'ai besoin? Est-ce que cette meilleure pratique est la plus sûre? Est-ce que je vais dans la bonne direction ici? Toute aide serait appréciée. Merci

Était-ce utile?

La solution

Ok, quelques choses:

1) Cancan est assez facile à utiliser et vaut l'installation mineure. Voici un exemple de l'application / modèles / capacité.rb pourrait ressembler si vous avez deux méthodes d'instance utilisateur est_admin? Et est_reviewer?

class Ability
  include CanCan::Ability
  def initialize(user)
    if user && user.is_reviewer?
      can :access, :rails_admin
      can :dashboard
      cannot :read, [Class1, Class2, Class3]
      can :read, Class4
    end
    if user && user.is_admin?
      can :access, :rails_admin
      can :manage, :all
    end
  end
end

Votre configuration Railsadmin contiendrait ce qui suit:

RailsAdmin.config do |config|
  config.authorize_with :cancan
  ...
end

Et n'oubliez pas, vous devrez ajouter Cancan à votre gemfile pour être installé comme dépendance.

2) Ensuite, et probablement plus précieux, c'est que vous ne voulez pas lancer le code de redirection dans la méthode d'authentification. Au lieu de cela, vous voudrez peut-être ajouter ce qui suit à ApplicationController:

rescue_from Acl9::AccessDenied do |exception|
  respond_to do |format|
    format.json do
      render :json => { :success => false, :message => "You do not have access to do this action." }
    end
    format.html do
      flash[:error] = 'You do not have access to view this page.'
      redirect_to root_url
    end
  end
end

Ou juste:

rescue_from Acl9::AccessDenied do |exception|
  flash[:error] = 'You do not have access to view this page.'
  redirect_to root_url
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top