前後端分離(前後端mv*)的情況下,前端如何處理授權(quán)邏輯?
(mv* 可能是mvc,也可能是mtv, 或是mvvm等等)
後端:
BooksController
indexAction()
showAction($id)
editAction($id)
$book = Book::findOrFail($id);
$user = Auth::user();
//授權(quán)判斷
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等授權(quán)系統(tǒng)做出授權(quán)判斷。
問(wèn)題是:
像Emberjs、Angularjs等前端mv*框架如何處理授權(quán)部分呢?
例如未登陸(瀏覽用戶(hù))明確10篇文章, 登陸用戶(hù)明確更多內(nèi)容。
方式1)像後端一樣,使用單獨(dú)的授權(quán)系統(tǒng)/授權(quán)邏輯來(lái)處理嗎?
方式2)把 授權(quán)邏輯判斷結(jié)果放到j(luò)son資料裡面,回給前端,前端直接使用?
BooksController
editAction($id){
...
$book = ....;
$user = Auth::user()/Null//;登陸用戶(hù)或沒(méi)有登陸的匿名游客用戶(hù);
// 授權(quán)判斷, 返回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類(lèi)別orm元件的時(shí)候, 前端ember-data/model是不是要跟後端簡(jiǎn)單映射一下就可以了? 安全問(wèn)題的認(rèn)證和授權(quán)2個(gè)部分如何處理的呢?
接觸過(guò)的項(xiàng)目是使用"方式2)把授權(quán)邏輯判斷結(jié)果放到j(luò)son數(shù)據(jù)裡面,返回給前端,前端直接使用?" 的,就是後端返回用戶(hù)擁有的權(quán)限,然後前端去做判斷,不過(guò)我感覺(jué)這樣的話(huà)安全性是不是就降低了,如果篡改了返回結(jié)果的話(huà)前端的權(quán)限就被破壞掉了,不過(guò)是在知道規(guī)則定義的情況下才可能。