2016-05-05 10 views
0

Laravelでは、他のユーザーのデータにアクセスするようにユーザーを制限する方法を教えてください。Laravel - ユーザーが他のユーザーデータにアクセスすることを許可しない

各ルート機能ごとにコードを書き留める必要がありますか?またはlaravelは中心的なアプローチを提供しますか?

+0

助けてくれるかもしれない:https://mattstauffer.co/blog/acl-access-control-list-authorization-in-laravel-5-1 – techfoobar

+0

私が想像する状況に依存する。現在認証されているユーザーのIDを使用して情報を取得するクエリを実行できます –

答えて

4

あなたのユースケースはわかりませんが、あなたのユーザーが他のユーザーのプロフィールを見ることを防止したいとします。あなたのショーのユーザーのルートが

/users/{id}

のようなものであれば今それからちょうどのがmyAuth

class MyAuth 
{ 
    public function handle($request, Closure $next) 
    { 
    if(!auth()->check && !auth()->user()->id == request()->get('id')) 
    { 
     dd("you are not allowed to see this"); 
    } 

    return $next($request); 
    } 
} 

を言わせて、あなたHttp/kernel.php

protected $routeMiddleware = [ 
    'auth' => \App\Http\Middleware\Authenticate::class, 
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
    'admin' => \App\Http\Middleware\Admin::class, 
    //Your new middleware 
    'myAuth' => \App\Http\Middleware\MyAuth::class, 
]; 

に含めるそして、あなたの経路が含まれるミドルウェアを作成しますこのミドルウェアで

Route::group(['middleware' => 'myAuth'], function() {  
    Route::get('user/{id}', function() { 
     //Only user with id 1 can see profile of user with id 1 
    }); 
}); 
0

route groupを作成して、一部のユーザー(またはゲスト)から保護することができます。

public function updateProfile(Request $request) 
{ 
    if ($request->user()->id === 17) { 
     // $request->user() returns an instance of the authenticated user... 
    } 
} 

しかし、通常は、ユーザーのグループを使用したい:

if ($request->user()->isAdmin === true) { 

または:

if (Auth::user->isAdmin === true) { 

詳しいユーザーを確認するために

Route::group(['middleware' => 'auth'], function() { 
    Route::get('/', function() { 
     // Uses Auth Middleware 
    }); 

    Route::get('user/profile', function() { 
     // Uses Auth Middleware 
    }); 
}); 

はこのような何かを認証とデータ保護の場合here

+0

これは、「1人のユーザーの他のユーザーのデータへのアクセスを制限する方法」には対応していません。 – Abhishek

+0

私は自分の答えを更新し、もっと例を挙げてみました。 –

2

私が知っている最も簡単な方法は、あなたのモデルにスコープメソッドを追加することです。これにより、データアクセスレベルが保護されます。より大きなシステムと複雑なデータ構造にはよりよい解決策が必要です。ミドルウェアを作成すると、ハッキングの可能性を報告する柔軟性と能力が向上します。

public function scopeMy($query) 
{ 
    $user = Auth::user(); 
    return $query->where('user_id', $user->id); 
} 
// usage 
Article::where(...)->my()->get(); 

// you can pass arguments to method too 
public function scopeMy($query, $user) 
{ 
    return $query->where('user_id', $user->id); 
} 
// usage 
Article::where(...)->my($user)->get(); 
0

Laravelの組み込み機能「ポリシーは、」より良いとクリーンなソリューションであるように思われます。 laravel docs on authorizationを参照し、@techfoobarが示唆するように、thisを参照してください。

関連する問題