2012-09-08 210 views
3

我有一個JavaScript Web應用程序幾乎完全呈現客戶端。 通過REST接口使用模型在客戶端和服務器之間交換數據,然後使用客戶端模板呈現數據。如何將權限/授權數據傳遞給客戶端Javascript?

我現在需要根據用戶角色/權限(授權是基於服務器端模型的ACL)有條件地呈現UI的某些部分(或執行某些操作)。

什麼是最好的方式從服務器通信的許可數據到客戶,考慮到:

  1. 的模型交換可能有其他的嵌入式型號,其 特定權限
  2. 我需要還知道對不同型號的READ和CREATE權限(因此模型對象尚不可用客戶端)
  3. 應儘量減少REST調用和DB調用

回答

3

您的客戶應根據服務器基於每個請求返回的信息向用戶展示控件。如果來自服務器的響應包含一些旨在用於執行操作的信息,則客戶端應該採取該提示並啓用按鈕或使其可見或其他。

使用這種方法,您可以根據資源/權限 - 此模型+ HTTP方法來定義您的ACL。當服務器即將返回資源表示形式時,它可以包含用戶應該通過輪詢ACL獲取用戶擁有的所有資源(或其他資源,如兒童/後代資源)的資源的任何選項。

+0

是的,我認爲這是我唯一可行的選擇。它突出了主要概念......做得稍微複雜一些。我將通過我的完整解決方案來更新這篇文章。 – Mario

0

這我不知道你的應用需求是什麼,或者如果你正在使用的任何JavaScript框架。我會看here。 Addy Osmani在javascript社區非常大,並且幫助創建了這個javascript框架。它看起來像它有能力處理你的問題。下面是從主自述

沙盒包括權限層,讓您的小部件配置權限,如特定部件是否有渲染頁面等

權報價還有一些其他的javascript框架,你可以看看,這將使頁面級的安全性變得更加清晰,並且意味着你不必重寫很多代碼。另一個例子是Backbone Marionette它具有複合視圖的概念,可以使它直接實現頁面級安全性。

最後,另一種選擇是根本不轉移您的安全信息。您的REST API只能提供他們可以訪問的模型信息。您需要以適當處理「缺失」數據的方式編寫客戶端模板。