2012-04-04 6 views
1

Lernen Schienen Entwicklung und würde in der Regel lieber eine Antwort als Vergeudung Menschen Zeit suchen, aber dies hat meinen Kopf in der ganzen Nacht.Erweiterte Einschränkungen in Schienen 3 für benutzerorientiertes Routing

Im Grunde versuche ich hier benutzerabhängig Ansichten ala Github usw.

Ich versuche, die Anweisungen zu befolgen gelegt zu präsentieren: http://collectiveidea.com/blog/archives/2011/05/31/user-centric-routing-in-rails-3/

Meine Authentifizierung zur Zeit von der Railscast ist "Authentifizierung von Scratch - überarbeitet", die Sitzungen verwendet, mein sessions_crontroller.rb:

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
     user = User.find_by_email(params[:email]) 
     if user && user.authenticate(params[:password]) 
     session[:user_id] = user.id 
     redirect_to root_url, notice: "Logged in!" 
     else 
     flash.now.alert = "Email or password is invalid" 
     render "new" 
     end 
    end 

    def destroy 
     session[:user_id] = nil 
     redirect_to root_url, notice: "Logged out!" 
    end 
end 

Und mein routes.rb:

Da ich keine Cookies verwende, empfiehlt der letzte Kommentar unter diesen Blogposts, request.session [: your_key] anstelle von request.cookies.key ("user_token") zu verwenden, wenn sie jedoch protokolliert werden in ich bin immer noch zu static_pages # nach hause genommen? Wenn jemand etwas zum Thema bringen könnte, würde ich es sehr schätzen.

Ich entschuldige mich auch für Formatierungsfehler etc, das ist meine erste Frage auf Stackoverflow.

Danke nochmal!

Antwort

1

Nicht sicher über Ihre genaue Frage, aber ich habe nur etwas Art ähnlich wie diese, vielleicht wird mein Code Ihnen helfen:

Meine Routen:

# Except from config/routes.rb 
require File.expand_path("../../lib/role_constraint", __FILE__) 

MyApp::Application.routes.draw do 
    mount Resque::Server, :at => "/resque", :constraints => RoleConstraint.new('admin') 
    ... 
    ... 
    ... 

Meine Einschränkung:

# lib/role_constraints.rb 
class RoleConstraint < Struct.new(:value) 
    def matches?(request) 
    request.session[:role] == value 
    end 
end 

Meine Sitzungen Controller:

# app/controllers/sessions_controller.rb 
class SessionsController < ApplicationController 
    before_filter :require_user, :only => :destroy 
    def new 
    end 

    def create 
    user = User.find_by_username(params[:username]) 
    if user && user.authenticate(params[:password]) 
     session[:user_id] = user.id 

     # Just for /resque 
     # Not secure - if you change a user's role, it will not be updated here 
     # until they log out and log in again. 
     session[:role] = user.role 

     if user.email.nil? 
     redirect_to user, :notice => "Please add your email address to your account" 
     else 
     redirect_to root_url, :notice => "Logged in!" 
     end 
    else 
     flash.now.alert = "Invalid email or password" 
     render "new" 
    end 
    end 

    def destroy 
    session[:user_id] = nil 
    session[:current_project_id] = nil 
    redirect_to root_url, :notice => "Logged out!" 
    end 
end