前後端分離(前後端mv*)的情況下,前端如何處理授權邏輯?
(mv* 可能是mvc,也可能是mtv, 或是mvvm等等)
後端:
BooksController indexAction() showAction($id) editAction($id) $book = Book::findOrFail($id); $user = Auth::user(); //授权判断 if ($user->hasRole/Permission('edit-book')) { //$acl->isAllowed($user, $book, 'edit-book') ..... $book->price = Input::get('price'); $book->save(); ...... } ....... createAction() deleteAction($id)
後端的controller/action等操作通常使用acl/rbac等授權系統做出授權判斷。
問題是:
像Emberjs、Angularjs等前端mv*框架如何處理授權部分呢?
例如未登陸(瀏覽用戶)明確10篇文章, 登陸用戶明確更多內容。
方式1)像後端一樣,使用單獨的授權系統/授權邏輯來處理嗎?
方式2)把 授權邏輯判斷結果放到json資料裡面,回給前端,前端直接使用?
BooksController editAction($id){ ... $book = ....; $user = Auth::user()/Null//;登陆用户或没有登陆的匿名游客用户; // 授权判断, 返回1或者0 $canEdit = $user->hasPermission('edit-book'); $acl->isAllowed($user, $book, 'edit-book'); return new JsonResponse([ 'book'=>$book, 'user'=>$user, 'can_edit'=>$canEdit, ........ ]); }
3)使用Emberjs這種和後端極為相似的前端mvc框架,尤其是有完整的ember-data類別orm元件的時候, 前端ember-data/model是不是要跟後端簡單映射一下就可以了? 安全問題的認證和授權2個部分如何處理的呢?
接觸過的項目是使用"方式2)把授權邏輯判斷結果放到json數據裡面,返回給前端,前端直接使用?" 的,就是後端返回用戶擁有的權限,然後前端去做判斷,不過我感覺這樣的話安全性是不是就降低了,如果篡改了返回結果的話前端的權限就被破壞掉了,不過是在知道規則定義的情況下才可能。