2016-07-24 5 views
2

私は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. 

私は何をすべきを得ますか?

答えて

0

すると、このお試しください:UsersPolicy.phpに追加:「門が自動的に:

enter code here/** 
* @var User 
*/ 
protected $user; 

/** 
* Create a new policy instance. 
* 
* @param User $user 
*/ 
public function __construct(User $user) 
{ 
    $this->user = $user; 
} 

をそして、あなたのUsersController.php変化を$this->authorize('edit', $user);documentationあたりとして

0

を助け

希望$this->authorize('edit');へ認証されたユーザがいない場合、すべての能力に対してfalseを返します。 "したがって、認証を行う前に、現在認証されているユーザを返す場合は、Auth :: user()をチェックしてください。あなたの要求ファイルで

2

public function authorize() 
{ 
    return true; 
} 
を設定しました
関連する問題