2015-11-10 140 views
0

我正在構建一個複雜的網頁,它有許多用戶/組/權限,用戶可以根據ACL(使用Symfony2Symfony2 ACL)查看全部/部分/沒有特定類型的對象。 。AngularJs的服務器端渲染模板

我現在正在處理的是,我不想在前端顯示每個UI元素,並且如果用戶做了他沒有權限的操作,就會拋出403錯誤。用戶沒有權限看到的隱藏元素對UX來說會更好。

這就好像我爲用戶顯示產品信息頁面,如果用戶沒有權限在此產品或所有產品上執行此操作,我不想顯示編輯/刪除按鈕(類別範圍權限)。

隨着Twig和服務器端渲染模板就會很容易如添加一堆權限檢查的模板

{% if is_granted('EDIT', product) %} 
    <button>Edit product</buttom> 
{% endif %} 

但如何與AngularJs處理這個在客戶方?

我想是這樣的:

  1. 創建服務嫩枝模板渲染服務器端的AngularJs控制器方法。這需要的id識別物體,這對用戶必須按順序對權限的參數看到編輯/刪除在模板呈現按鈕(Twigis_granted()處理此服務器側)

  2. 用戶詢問以查看特定產品/product/1。路由器templateUrl將爲/templates/product/view.html?object_id=1,其中object_id標識對象,在將模板服務器端渲染爲授予或拒絕呈現UI元素時應使用該對象。

  3. 產品JSON然後取出並放入模板,它已經被渲染服務器端,並具有一定的角{{ }}等待產品數據被加入到。

是否有任何類似的情況下解決了使用您熟悉的其他服務器端技術,可以作爲示例引導我邁向成功之路?

回答

0

在我們的項目客戶端Angular代碼就足夠了。

  • 後端不會發送任何數據給前端用戶沒有查看/訪問權限。 (403)
  • 前端目前登錄頁面用戶與女巫用戶可以進行身份​​驗證。然後前端將提供的憑證發送到後端,後者負責實際檢查。
  • 後端將爲前端提供用戶角色/訪問權限/特權。如果那些更復雜的專用API端點將被提供。 (鐵:可以在用戶訪問這個要:第鐵:那要:是的,但不能刪除等。),如果對數據的從後端返回有條件地呈現UI部分
  • 前端會使用。

請注意,我使用後端和前端,所描述的技術是框架不可知的,幾乎可以與任何工作。

對於Angular,我們創建了CurrentUser服務,該服務有is('role_name'),如果用戶已分配角色則返回true,否則返回false。 ng-if或plain舊if(),然後用於有條件地呈現html標記/數據的位置。

+0

我需要檢查用戶對特定對象的特定操作權限(VIEW/CREATE/EDIT/DELETE)。在每個對象上進行API調用檢查都不會有效,我認爲。 – nn4n4s

+0

您是否可以擴展API,以便每次前端請求時都將ACL與數據一起發送?然後你需要一些解碼該acl數據的服務,但是在UI上它仍然是一個如果每個動作。 –

+0

@ nn4n4s你不應該發送那些loged用戶不能'VIEW'的數據如果有一些從它計算出來的聚合值,在後端做。最終用戶可以打F12,訪問開發工具,並查看**整個**網絡流量。所以根本不要發送這樣的數據。 –