2015-03-31 112 views
3

我有两个类型的用户为我的项目,管理员和客户。我需要阻止客户通过URL传递id来访问其他客户的详细信息,如下所述。在这个客户中有两个类别,高级客户和客户客户。这里还需要上述功能。我使用过滤器路由到不同的仪表板和管理员和客户端。我的filter.php文件如下。如何阻止相同类型的用户访问Laravel中的其他数据?

Route::filter('auth', function() 
{ 
    if (Auth::guest()) 
    { 
     if (Request::ajax()) 
     { 
      return Response::make('Unauthorized', 401); 
     } 
     else 
     { 
      return Redirect::route('home'); 
     } 
    } 
}); 

Route::filter('admin', function() 
{ 
    if (Auth::user()->isAdmin != 0) return Redirect::route('getLogout'); 
}); 
Route::filter('client', function() 
{ 
    if (Auth::user()->isAdmin != 1) return Redirect::route('getLogout'); 
}); 

该工作正常。

但是,如果客户端试图通过URL访问其他客户端的详细信息,他会得到它。例如,在我的项目中有一个URL来访问客户端配置文件。这是通过像这样的“localhost/public/profile/{id}”传递客户端id来完成的。下面给出了route.php文件的一部分。

Route::group(array('before' => 'auth'), function() 
{ 
    Route::group(array('before' => 'auth|client'), function() 
    { 
     Route::get('profile/{id}', array('uses' => '[email protected]', 'as' =>'viewProfile')); 
    }); 
}); 

如何访问其他客户端通过传递它们的ID,使用过滤器或其他方法胎面花纹块的客户呢?我试图通过在控制器中指定,但它看起来不太好。

另外在我的客户中,有两种类型的客户端。高级和客户客户。这些类型在表名为客户端的名为Clients的模型中指定。在客户表中有字段命名类型。我需要阻止访客客户端访问高级客户端可以访问的某个URL。

任何人都可以帮忙吗?

回答

2

基本的想法是创建一个获取当前用户ID的custom filter,并将其与请求中的用户ID进行比较,然后采取所需的操作,这可能会将其重定向到其他位置。将它包裹在你想要影响的任何路线中。

过滤器会是这个样子:

Route::filter('profile_access', function($route, $request, $value) 
{ 
    $requestedId = $route->getParameter('id'); 
    $userId = MyUserService::getCurrentUser()->getId(); 

    // compare and redirect... 
}); 
+0

谢谢...它工作正常 – manoos 2015-03-31 10:02:34

相关问题