这是Laravel 5.2的全新安装,我唯一做的就是向表用户添加一个新列,这个新列是调用角色,它只是整数...
我要做的是根据此列的信息加载控制器/视图...
假设列角色的值为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'
它“工作”但不是我想要的,我真的不想为用户控制安装第3个软件包,我只想要一些非常简单的东西......所以我怎么能做到这一点?...
答案 0 :(得分:1)
根据Matt的说法(我一开始并没有得到它,我是laravel的新人,所以请耐心等待),这就是我所做的......
安装新的laravel ...
然后运行此php artisan make:auth
,它将安装用户注册/登录/重置所需的一切...
然后打开你的AuthController.php改变这个protected $redirectTo = '/home'
你想要的任何东西,在我的情况下我叫了委托$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');
}
}
}
那就是你如何根据用户信息获得不同的观点...至少对我有用..
<强> ------------更新强>
在我玩了一点之后,我发现即使你为admin / user / customers / providers ...等加载了正确的视图,url / path也不正确,这就是原因:
使用上面的代码,当用户加载提供正确视图的委派控制器时,你会得到
foo.com/login,但如果用户是管理员,我们需要像foo.com/这样的网址保持为foo.com/delegate admin not / 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']);
});
通过调用名称路由return redirect()->route('/myprofile')
等,您可以将用户重定向到您网站的任何部分。
现在这个工作正常,我们需要做最后一次检查,看看用户正在加载什么,要做到这一点非常简单,你应该在每个视图控制器上都有这样的东西......
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!