创建中间件以防止用户在laravel 5.1中操纵其他用户的信息


Create middleware to prevent a user manipulates the information of other users in laravel 5.1

我有个问题。我需要防止登录的用户可以编辑/查看其他用户的信息更改url中的id。

例如:

URL类似于myapp/users/32/edit,但要更改id,可以编辑其他用户的信息

我试图创建一个中间件,但没有达到预期的效果。我创建了以下内容:

L

<?php
namespace App'Http'Middleware;
use Closure;
use Auth;
class UserSecutiry
{
    /**
     * Handle an incoming request.
     *
     * @param  'Illuminate'Http'Request  $request
     * @param  'Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->user()->id == Auth::id()) {
            return $next($request);
        }
        return redirect()->to('/');
    }
}

但是$request->user->id返回我记录的用户id,因此中间件不起作用,并且可以操作任何更改id的用户信息。

我怎样才能完成这项任务。我希望你的帮助。来自智利的问候

开始:

$request->route()->id

你的路线应该是这样的:

Route::get('/test/{id}', [
    'middleware' => 'Upping'Http'Middleware'ExtendSessionMiddleware::class,
    function ($id) {
        dd('some');
    }
]);

不适用于全局中间件。

如果$request->user()->id返回通过URL指定的用户ID,那么您的代码应该可以工作。

URL id | Auth::id() | Condition
-------------------------------
  1    |     3      | false
  2    |     3      | false
  3    |     3      | true
  4    |     3      | false

如果$request->user->id返回记录的用户。然后这样做:

public function handle($request, Closure $next)
{
    // find the user who will be edited 
    $id = $request->route('id');
    $userToEdit = 'User::find($id);
    if ($userToEdit->getId() === Auth::id()) {
        return $next($request);
    }
    return redirect()->to('/');
}

我假设您的路线有一个用户id的占位符:

Route::get('users/{id}/edit');