2012-11-13 52 views
3

這更多的是對模式和討論的請求,而不是一個簡單的一次性問題。我有一個骨幹應用程序,用戶可以成爲不同角色的一部分。該路線被定義爲平常:骨幹限制用戶在基於權限的應用中的路由

routes: 
    "": "showHomePage" 
    "import": "showImportPage" 

我想import頁是隻對特定用戶角色訪問。我想我可以這樣做:

showImportPage: -> 
    if not MyApp.CurrentUser.can_import 
    return 

確實有效。當然,正如您可以想象的那樣,只需使用Chrome控制檯即可輕鬆利用此功能,即使我不在任何地方顯示鏈接,只需進入地址欄並輸入它即可。

即使上述應該足以阻止一個普通用戶,我的問題是:我怎樣才能確保從被訪問的路線?

我到目前爲止的意見是,唯一的方法是在服務該路由之前回溯到服務器,無論是通過檢查一個特殊的URL或通過在訪問之前重新獲取用戶模型...我有這個但是,如果每個url都必須由服務器進行身份驗證,並且我需要在允許用戶導航之前顯示通常的ajax微調,那麼這基本上會打破「單頁面應用程序」背後的整個想法的目的。 ..我知道數據量回來和前進是最小的(只有JSON用戶信息或更少),但仍然...

如果您曾經面對過這個問題,您的意見或解決方案是什麼?

回答

2

我認爲你的問題是一個很好的問題。

我使用BackboneJS和Jquery移動設備製作了PhoneGap應用程序,所以我面臨着現在面臨的相同問題。

我認爲授權不能單獨生活在客戶端,因爲它本質上是錯誤的。生活在客戶端的客戶完全由客戶控制,這是沒有人能改變的。

只要請求獲取所需的最少數據並且所有邏輯/視圖組件位於客戶端上,向服務器發送請求不會中斷單應用程序頁面範例。請注意,如果您在該頁面中存在您不希望普通用戶查看的敏感數據,則在驗證請求的授權後,它也必須從服務器發送,因此它不僅是JSON必須發送的用戶信息,它也是數據本身。

我希望別人在這裏證明我錯了,但就我而言,這就是交易。

+0

我同意。我現在使用的解決方案是重新獲取用戶並最終重定向到主頁,但即使這種解決方案存在缺陷,只需通過簡單地插入斷點並更改結果即可解決問題......我開始認爲唯一的解決方案是真正在頁面呈現的位置從服務器獲取(最小)數據,並且在這種情況下返回有限的數據集或403錯誤... – Tallmaris