Laravel 5.2, 根据用户信息加载视图

Laravel 5.2, Load a view based on user information

这是 Laravel 5.2 的全新安装,我唯一做的就是向 table 用户添加一个新列,这个新列是调用角色,它只是整数...
我想做的是根据此列的信息加载 controller/view...
假设列角色的值为 1,则加载视图 X
在我的路线文件中我有这个

Route::group(['middleware' => ['web']], function () {
    Route::auth();
if(Auth::user()->roles == '1') {
    Route::get('/admin', 'AdminController@index');
    Route::post('/admin', 'AdminController@save');
    Route::get('/admin/{datas}', 'AdminController@datas');
    Route::get('/admin/list', 'AdminController@list');
    Route::get('/admin/list/{details}', 'AdminController@details');
} else {
    Route::get('/login', 'UsersController@login');
}

如果我在视图中使用这个 Auth::user()->roles == '1',它 "works" 但这不是我想要的,我真的不想为用户控制安装第三个包,我只想要一些非常简单的东西...那么我怎样才能做到这一点?...

根据 Matt 所说的(我一开始不明白,我是 laravel 的新手所以请耐心等待),这就是我所做的...
安装新的 laravel...
然后 运行 这个 php artisan make:auth,它会安装用户需要的所有东西 register/login/reset...
然后打开你的 AuthController.php 改变这个 protected $redirectTo = '/home' 为任何你想要的,在我的例子中我调用了 delegate $redirectTo = '/delegate'
然后在你的 routers.php 文件上放这样的东西

Route::group(['middleware' => ['web']], function () {
    Route::auth();
    Route::get('/delegate', 'DelegateController@index');
});

您实际上不需要此路线的视图,您需要的是控制器...
在这个控制器上 DelegateController.php 会放这样的东西

namespace App\Http\Controllers;

use App\Http\Requests;
use Auth;
use Illuminate\Http\Request;


// use App\Http\Controllers\Controller;

class AdminController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
    //
    public function index() {
        // TODO Gets Data...
        $datos = ['Nombre', 'Otro Nombre', 'Otro mas'];

        // Return Data to tyhe view...
        if(Auth::user()->roles == '11') {
            return View('admin.home', compact('datos'));
        } else {
            return View('/welcome');
        }
    }
}

这就是你如何根据用户信息获得不同的观点......至少对我有用..

------------更新

在我玩了一会儿之后,我发现即使你为管理员/用户/客户/供应商加载了正确的视图...等 url/path 在这里也是不正确的原因:
使用上面的代码你得到
foo.com/login 当用户加载提供正确视图的委派控制器但 url 保持为 foo.com/delegate 如果用户是admin 我们想要类似 foo.com/admin 而不是 /delegate 的东西,即使你手动将它从 /delegate 更改为 /admin 它仍然有效,但问题在于如果用户不是管理员它仍然会显示管理面板,我们不希望这样...修复我必须更改我的委托控制器...而不是加载视图我必须将用户重定向到正确的路径...

public function index() {
    if(Auth::user()->roles == '10') {
         return redirect()->route('admin');
        } else {
         return redirect()->route('/');
        }
    }

这是与以前相同的代码,但我没有加载视图,而是重定向了用户,为了使其在您的路由文件中正常工作,您必须如下声明每个路径的名称

Route::group(['middleware' => ['web']], function () {
    Route::auth();
    Route::get('delegate', 'DelegateController@index');
    // Add your route
    // Route::get('admin', 'AdminController@home');
    Route::get('admin', ['as'=>'admin', 'uses'=>'AdminController@home']);
});

这样你就可以通过调用 names route return redirect()->route('/myprofile') ...etc
将你的用户重定向到你网站的任何部分 现在这是可行的,我们需要最后检查一下用户正在加载什么,要在每个视图控制器上做到这一点非常简单,你应该有这样的东西......

class AdminController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
        // gets the disco bouncer working...
        if(Auth::user()->roles != '10') {
            Auth::logout();
        }

    }
    //
    public function home() {
        // TODO Gets Data...
        $datos = ['Nombre', 'Otro Nombre', 'Otro mas'];
        // TODO build a model for the actual data...
        // Return Data to the view...
        return View('admin.home', compact('datos'));

    }
}

如您所见,我们可以在所有控制器上使用它并跳过 DelegationController,但是您将不得不在单个 app.blade 主视图上为每个用户角色创建一个菜单,这看起来会更多脏...
如果你问我,是的,我很享受学习 Laravel!