Laravel 5委托一条路线 - 根据角色加载不同的控制器

时间:2015-05-29 13:25:17

标签: php authentication laravel admin

所以我刚刚开始学习Laravel,并且我已经实现了Entrust Role Permission包,它非常有效。现在我的问题是,我想要一个'仪表板'像这样的页面:example.com/dashboard。

事情是,我不确定如何设置它。因为在我的App \ Http \ Controllers文件夹中我为Admin和User创建了子文件夹,所以它们都有一个Dashboardcontroller,因为我想为这两种类型的用户显示不同的数据。

如何声明指向仪表板并检查经过身份验证的用户具有哪个角色的路由,然后加载正确的控制器?它是否必须对命名空间执行某些操作?我还没找到一个好的答案 因此,为了更清楚,我不想要这样做: example.com/dashboard/admin和example.com/dashboard/user,而不仅仅是一个url example.com/dashboard,并检查用户具有哪个角色。

我很抱歉,如果答案非常明显,这件事对我来说是新的,我还没有找到任何好的答案。

1 个答案:

答案 0 :(得分:0)

这样的事情对你有用。

<强> routes.php文件

Route::get('/dashboard', ['as'=>'dashboard', 'uses'=> 'DashboardController@dashboard']);

<强> DashboardController.php     

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\User;
use App\Admin;

class DashboardController extends Controller {
    public function dashboard(){
        if ($this->auth->user()->hasRole('admin') )
        {
            return $this->showAdminDashboard();
        }
        elseif ($this->auth->user()->hasRole('user') )
        {
            return $this->showUserDashboard();
        }
        else {
            abort(403);
        }
    }

    private function showUserDashboard()
    {
        return view('dashboard.user');
    }

    private function showAdminDashboard()
    {
        return view('dashboard.admin');
    }
}

每条评论的修改

听起来像this approach这样的东西可能就是你要找的东西。

<?php

$uses = 'PagesController@notfound';
if( $this->auth->user()->hasRole('admin') )
{
    $uses = 'AdminController@index';
}
elseif ($this->auth->user()->hasRole('user') )
{
    $uses = 'UsersController@index';
}


Route::get('/dashboard', array(
     'as'=>'home'
    ,'uses'=> $uses
));

那就是说,我觉得让DashboardController工作得更好。我发现在使用仪表板时,我从开头页面的各种模型中获取有关该网站的统计信息。我只使用DashboardController来获取这些一般信息。在仪表板中,我想要其他具有您要查看/编辑的特定项目的页面。这样,如果管理员需要访问查看/编辑与用户相同的信息,则无需重写代码。您可以更新该特定控制器的安全性以允许两个组。