Domanda

Sto cercando di ottenere il metodo di permit a lavorare utilizzando il Rails-autorizzazione-plugin e Authlogic , e io continuo a correre in questo errore:

Quando provo:

class ApplicationController < ActionController::Base
  ...
  before_filter permit 'admin'
  ...

ottengo questo:

Authorization::CannotObtainUserObject in HomeController#index
Couldn't find #current_user or @user, and nothing appropriate found in hash

Ora io ho il mio setup metodo current_user, e funziona, perché ho usato un po 'ovunque altro nella mia app:

class ApplicationController < ActionController::Base
  ...

  helper_method :current_user

  private

  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
  end

  ...

so anche che io ho gli utenti con i ruoli appropriati nel mio database, perché questo metodo funziona:

def require_admin
   unless current_user.is_admin? || current_user.is_root?
      flash[:warning] = 'You are not an administrator and cannot access this page.'
      redirect_to root_path
   end
end

posso far funzionare tutto se ho appena verifico il livello utente utilizzando questo:

before_filter :require_admin, :only => 'index'

... ma non dovrei essere in grado della stessa cosa in modo efficace con permit e permit??

Qualsiasi aiuto sarebbe molto apprezzato. Fammi sapere se hai bisogno di vedere più codice e sarò felice di pubblicarlo. Non c'è davvero nulla su Google che io possa fare heads-o-code di ottenere per quanto riguarda questi due sistemi di lavorare con l'altro.

È stato utile?

Soluzione

Va bene, penso che ho capito.

Come Jared ha giustamente osservato, il corretto utilizzo è

permit 'admin'

(non come parte di un before_filter).

TUTTAVIA ...

... il :get_user_method predefinito è impostato su #current_user, che è quello che utilizza il plugin acts_as_authenticated. Io, come osservato in precedenza, sto usando Authlogic, in cui ho il metodo definito come current_user (senza il simbolo di cancelletto).

Quindi, avevo provato quanto segue:

permit 'admin', :get_user_method => current_user

solo per essere accolti da un messaggio di errore bel spiegando che non avevo tale variabile o un metodo. Quello che mi mancava, tuttavia, è che l'opzione hash prende una stringa , non una chiamata diretta al metodo !! (Errore stupido, lo so!)

permit 'admin', :get_user_method => 'current_user'

... sembra funzionare per me.

Mi piace Ruby e Rails, ma a volte la sua semplicità può essere una maledizione della propria; Vengo sempre posseduto dalle cose semplici. :)

Altri suggerimenti

Si utilizza il plugin in modo non corretto. Esso non deve essere collocato in un filtro prima.

A livello globale, è sufficiente dichiarare:

permit 'admin'

Questo è tutto.

Tutte le vostre azioni sarà cercare un oggetto o current_user @user e reindirizzare alla pagina di login, se non.

A livello per-action, lo si utilizza come un blocco:

def index
  permit 'admin' do
    @some_models = SomeModel.all
  end
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top