2011-08-15 37 views
0

現在我的應用程序有一個頁面模型。任何具有url// pages/3的人都可以查看頁面。我想讓公衆或私人的選擇。如何添加插頁式廣告頁來提示用戶在查看頁面前輸入密碼#顯示

  • 如果任何公衆人都可以查看。

  • 如果頁面是私密的,只有輸入密碼的用戶才能查看頁面。

現在該頁面使用Page#Show控制器呈現。什麼是正確的處理方式,以便當用戶嘗試訪問私人頁面時,他們首先需要正確輸入密碼,然後他們才能查看頁面?我將如何在控制器中構造它?

謝謝

回答

1

由於您使用的康康舞:

def show 
    @page = Page.find(params[:id]) 
    authorize! :read, @page 
end 

這將引發一個CanCan::AccessDenied錯誤(如果用戶沒有登錄或沒有被授權),它可以捕獲像這樣(docs):

class ApplicationController < ActionController::Base 
    rescue_from CanCan::AccessDenied do |exception| 
    # Save the requested path in the user's session 
    session[:return_to] = request.fullpath 
    # Send the user to the sign in page 
    redirect_to sign_in_path, :alert => exception.message 
    end 
end 

根據您的身份驗證系統,在成功登錄,您的會話控制器,你可以:

redirect_to session[:return_to] || your_default_after_sign_in_path 
# Clear the :return_to value 
session[:return_to] = nil 

我可能會錯過一些細節,但這是它的要點。祝你好運。

編輯: 我應該將我的答案的友好轉發部分歸功於Michael Hartl and his book

+1

感謝Danny,但用戶已登錄,無需登錄,所以我不確定這是否解決了問題。 – AnApprentice

0

看起來你需要一個授權解決方案。我建議CanCan它非常靈活。如果您還沒有進行身份驗證和/或不希望每個用戶進行身份驗證,則可以調整它以使用「頁面」作爲您「登錄」的資源而不是標準「用戶」。

+0

謝謝,我目前正在使用CanCan,但我不明白如何解決使用插頁式輸入頁面密碼視圖如果頁面是私人的? – AnApprentice

相關問題