请告诉我如何使用laravel限制页面,
我有3个用户
1.管理员,2.客户,3。合作伙伴
我想如果管理员登录然后打开only- admin.index页面
如果客户端登录,则打开only-client.index页面
我在代码
之后的 route.php 中使用过 Route::group(array('before' => 'role'), function(){
Route::resource('admin','AdminController@index');
Route::resource('client','clientController@index');
Route::resource('partner','partnerController@index');
});
使用上面的代码,如果没有任何用户登录,那么它正确,
AdminController但是,
如果我硬编码(url)点击clientController or partnerController
http://localhost/laravel-login/public/client
,那么客户页面即将到来
所以请告诉我如何避免这些
对不起我的英语不好..
谢谢
答案 0 :(得分:1)
您可以为每条路线使用不同的路线过滤器,并创建单独的过滤器,例如:
Route::group(array('before' => 'auth'), function() {
Route::resource('admin','AdminController@index');
Route::resource('client','clientController@index');
Route::resource('partner','partnerController@index');
});
在每个控制器中创建一个__construct
方法并添加过滤器,如:
public function __construct()
{
// In your AdminController
$this->beforeFilter(function() {
if(Auth::user()->role->name != 'admin') return redirect::to('/'); // home
});
}
同样地在其他控制器中声明其他过滤器:
public function __construct()
{
// In your clientController
$this->beforeFilter(function() {
if(Auth::user()->role->name != 'client') return redirect::to('/'); // home
});
}
等等。有关controller filtering的详细信息,请访问Laravel网站。
答案 1 :(得分:0)
限制控制器创建新中间件的最佳方法,您可以在请求之前定义规则。例如:
我有一个管理员控制器只注册具有管理员角色的用户可以访问它。 在定义路由时这样做包括中间件。
// namespace =指示我的控制器所在的位置(子文件夹) // middleware =表示我想为我的控制器提供哪些限制,你可以传递一个中间件或中间件阵列
Route::group([ 'namespace' => 'Admin','middleware' => ['auth' , 'IsAdmin'] ], function()
{
Route::resource('admin/posts', 'PostsController');
});
创建中间件并按照documentation
注册看看这是我的中间件
<?php
namespace App\Http\Middleware;
use Closure;
class IsAdmin
{
public function handle($request, Closure $next)
{
if($request->user()->is_admin == false ){
return redirect('/');
}
return $next($request);
}
}