Laravel4 + AngularJS。如何在后端保护不同的路由?

时间:2013-12-01 13:05:33

标签: angularjs laravel backend

我有一个基于Larvel 4框架的网站。我想基于AngularJS用动态后端替换当前后端。我不明白如何保护不同的后端路由。 现在我有了我的routes.php:

        Route::group(array('before' => 'manager-auth', 'prefix' => 'admin'), function()
    {

        // order management
        Route::group(array('prefix' => 'orders'), function()
        {
// Here order routes
        });

        // news management
        Route::group(array('prefix' => 'news'), function()
        {
// Here news routes
        });

        // all admin functions, no managers here!
        Route::group(array('before' => 'admin-auth'), function()
        {

            // user management
            Route::group(array('prefix' => 'users'), function()
            {
// Here user routes
            });

            // group management
            Route::group(array('prefix' => 'groups'), function()
            {
// Here group routes
            });

            // page management
            Route::group(array('prefix' => 'pages'), function()
            {
// Here page routes
            });
        });

        // dashboard
        Route::get('/', array('as' => 'admin', 'uses' => 'Controllers\Admin\DashboardController@getIndex'));
    });

所以来自经理或管理员组的任何人都可以管理新闻或订单并查看仪表板,但只有管理员组的成员才能管理用户,组和页面。

如果我理解正确,在AngularJS中重写后端的最佳方法是使用html模板,角度路由和ng-view指令。在这种情况下,Laravel仅用于提供json,验证输入和登录用户。

但是,我如何为管理员和经理实施不同的安全区域? 我是否需要创建Laravel控制器并仅为客户端检查路由以获取用户权限?或者有更好的方法来实现此功能吗?

可以将后端角度html模板放到/ public目录吗?

1 个答案:

答案 0 :(得分:1)

laravel安全/路由保持大致相同,但不是渲染html而是返回json文件。

ngRoute和angular-ui-router都有resolve属性,允许您拒绝不允许转到特定路线的用户。
但是有多种方法可以解决路由问题:

将后端模板放在公共位置确实可以让黑客深入了解后端前端代码,而可以公开XSS攻击面,但AngularJS> = 1.2 makes it hard将html注入到您的视图。

我使用了一种策略,其中模板位于“protected /”文件夹中,只能由登录用户访问。

如果您已使用grunt,建议您查看grunt-angular-templates 这允许您将模板分组到单个javascript文件中。 所以你只需要1条受保护的laravel路线。