前后端分离(前后端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データに入れてフロントエンドに返し、フロントエンドがそれを直接利用する、つまりバックエンドがパーミッションを返す」というものを使っています。ユーザーが所有しているものをフロントエンドが判断するのですが、これだと返された結果が改ざんされた場合にフロントエンドのパーミッションが破壊されてセキュリティが低下するような気がしますが、これは。ルール定義がわかっている場合にのみ可能です。