私はLaravel 5を学習しています。文書のQuickstart - intermediateを終了しました。タスクのアクションに対する権限チェックをユーザーに適用したいと思います。ユーザーの編集操作を使用するために、ターゲットユーザーが現在ログインしているユーザーかどうかを確認したい。しかし、ブラウザは私はhttp://myfirst.app/users/2/edit
にアクセスしようとすると、私に言って続けて:Handler.php行のHttpException 107:この操作は承認されていません
FatalThrowableError in UsersPolicy.php line 20:
Type error: Argument 1 passed to App\Policies\UsersPolicy::edit() must be an instance of Illuminate\Http\Request, instance of App\User given
routes.phpの
Route::get('/users/{user}', '[email protected]');
Route::get('/users/{user}/edit', '[email protected]');
Route::patch('/users/{user}', '[email protected]');
AuthServiceProvider.php
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
'App\Task' => 'App\Policies\TaskPolicy',
'App\User' => 'App\Policies\UsersPolicy',
];
UsersPolicy.php
namespace App\Policies;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Auth\Access\HandlesAuthorization;
class UsersPolicy
{
use HandlesAuthorization;
public function edit(Request $request, User $user)
{
return $request->user()->id === $user->id;
}
public function update(Request $request, User $user)
{
return $request->user()->id === $user->id;
}
}
UsersControl
TaskController.php
public function destroy(Task $task)
{
$this->authorize('destroy', $task);
$task->delete();
return redirect('/tasks');
}
TaskPolicy:Document's TaskControllerのdelete関数で
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UsersController extends Controller
{
protected $user;
public function __construct() {
$this->middleware('auth');
}
public function view(Request $request, User $user)
{
if($request->user()->id == $user->id){
return view('users.view', ['user' => $user]);
}
return redirect('/tasks');
}
public function edit(Request $request, User $user)
{
$this->authorize('edit', $user);
return view('users.edit', compact('user'));
}
public function update(Request $request, User $user)
{
$this->authorize('update', $user);
$user->update($request->all());
return redirect('/users/'.$user->id);
}
}
、$user
は$user
TaskPolicyの破壊機能が使用できるようにするために、$this->authorized('destroy', $task)
に渡されていませんler.php .php
public function destroy(User $user, Task $task)
{
return $user->id === $task->user_id;
}
はとにかく、私は例外を続き、がUserControllerの編集機能のパラメータ
$this->authorize('edit', $request, $user);
に$要求を追加しましたそして、私は
HttpException in Handler.php line 107:
This action is unauthorized.
私は何をすべきを得ますか?