前後端分離(前後端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個部分如何處理的呢?
高洛峰2017-05-15 17:05:17
接觸過的項目是使用"方式2)把授權邏輯判斷結果放到json數據裡面,返回給前端,前端直接使用?" 的,就是後端返回用戶擁有的權限,然後前端去做判斷,不過我感覺這樣的話安全性是不是就降低了,如果篡改了返回結果的話前端的權限就被破壞掉了,不過是在知道規則定義的情況下才可能。