如何阻止相同类型的用户访问Laravel中的其他数据


How to block same type of users accessing others data in Laravel?

我的项目有两种类型的用户,管理员和客户端。我需要通过URL传递id来阻止客户端访问其他客户端的详细信息,如下所述。在这个客户中有两类,高级客户和客人客户。这里我也需要上面的功能。我正在使用过滤器将不同的仪表板路由到管理员和客户端。下面给出了我的filter.php文件。

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');
});

Thsi工作正常。

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

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

如何通过传递id、使用筛选器或其他方法阻止客户端访问其他客户端配置文件?我试着在控制器中指定,但看起来不太好。

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

有人能帮忙吗??

基本思想是创建一个自定义过滤器,该过滤器获取当前用户的ID,将其与请求中的用户ID进行比较,然后采取所需的操作,可能是重定向到其他地方。将其包裹在您希望其影响的任何路线上。

过滤器看起来像这样:

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