laravel如何创建页面限制

时间:2014-05-30 07:02:48

标签: php laravel laravel-4

请告诉我如何使用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,那么客户页面即将到来 所以请告诉我如何避免这些 对不起我的英语不好.. 谢谢

2 个答案:

答案 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);
    }
}