6

特定のユーザーがページにアクセスできるかどうかを確認するために、laravel でルート フィルターを使用しようとしています。

Route::filter('check_roles', function()
{
    $current_url = URI::current();
    $access = 0;
    $nav = Session::get('navigation');
    foreach($nav as $k => $n){
      if(in_array($current_url, $n)){
        $access = 1;
      }
    }

    if($access == 0){
     return Redirect::to('home');
    }
    //problem is if the user has access to the page a blank page is returned

});

私は次のようなルートでそれを使用しています:

Route::get('admin/(:all)', array('before' => 'check_roles'));

問題は、ユーザーがページにアクセスできる場合、空白のページが返されることです。ユーザーがアクセス権を持っている場合、デフォルトのコントローラー アクションを続行するにはどうすればよいですか?

4

1 に答える 1

11

に置き換えRoute::get()ますRoute::filter('pattern: admin/*', 'check_roles');

これで、リクエストにこのパターンが含まれるたびに、check_roles フィルターが呼び出されます。これはあなたが現在必要としているものでありRoute::get()

Route::get()次のような個々のページで使用できます

Route::get('supersecret', array('before' => 'check_roles'), function() { return View::make('mysecret') });

詳細情報ルーティング - フィルター

コメントに対する私の提案を反映するために更新します。

Admin_Controllerを拡張するを作成し、Base_Controllerに認証フィルタを含めることができます__construct()

class Admin_Controller extends Base_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->filter('before', 'auth');
    }
}

このコントローラーを start.php に登録します (base_controller がマップされている Autoloader を検索します)。

Admin_Controllerまた、自分の領域を保護したいときはいつでも自分の領域を拡張できるようになりました。

class Pages_Controller extends Admin_Controller {
    // do cool stuff
 }

それが役立つことを願っています

于 2012-12-01T09:12:52.250 に答える