Laravelでは、他のユーザーのデータにアクセスするようにユーザーを制限する方法を教えてください。Laravel - ユーザーが他のユーザーデータにアクセスすることを許可しない
各ルート機能ごとにコードを書き留める必要がありますか?またはlaravelは中心的なアプローチを提供しますか?
Laravelでは、他のユーザーのデータにアクセスするようにユーザーを制限する方法を教えてください。Laravel - ユーザーが他のユーザーデータにアクセスすることを許可しない
各ルート機能ごとにコードを書き留める必要がありますか?またはlaravelは中心的なアプローチを提供しますか?
あなたのユースケースはわかりませんが、あなたのユーザーが他のユーザーのプロフィールを見ることを防止したいとします。あなたのショーのユーザーのルートが
/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
});
});
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。
これは、「1人のユーザーの他のユーザーのデータへのアクセスを制限する方法」には対応していません。 – Abhishek
私は自分の答えを更新し、もっと例を挙げてみました。 –
私が知っている最も簡単な方法は、あなたのモデルにスコープメソッドを追加することです。これにより、データアクセスレベルが保護されます。より大きなシステムと複雑なデータ構造にはよりよい解決策が必要です。ミドルウェアを作成すると、ハッキングの可能性を報告する柔軟性と能力が向上します。
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();
Laravelの組み込み機能「ポリシーは、」より良いとクリーンなソリューションであるように思われます。 laravel docs on authorizationを参照し、@techfoobarが示唆するように、thisを参照してください。
助けてくれるかもしれない:https://mattstauffer.co/blog/acl-access-control-list-authorization-in-laravel-5-1 – techfoobar
私が想像する状況に依存する。現在認証されているユーザーのIDを使用して情報を取得するクエリを実行できます –