2016-08-06 5 views
0

私は、アプリケーションで「プロファイル設定」セクションを作成しようとしています。 問題は、これを「Admin」の方法で行う方法を学びました。ルートは/users/{user}/editになり、コントローラ上でeditメソッドが呼び出され、編集ビューが返されます。そこで私は、ユーザーがルートusers/{user}にパッチを当てるフォームを持っていて、コントローラ上の更新メソッドを呼び出すでしょう。現在のユーザーをLaravelで経路指定しますか?

他のユーザーを編集する人はいないので、このルートを現在のユーザーに限定する方法があるかどうかを知りたいと思います。

ありがとうございます。

答えて

1

バージョン5.1以降、Laravelには必要とされるポリシーがあります。

は、コマンドを入力して、新しいポリシーを作成することができます。

php artisan make:policy UserPolicy 

あなたUserPolicyクラスでは次の方法で含めることができます。

public function updateProfile(User $user, User $updatedUser) { 
    return $user->id === $updatedUser->id; 
} 

に注意してください。最初のパラメータ$ユーザーを舞台裏で自動的に解決され、現在ログインしているユーザーです。アプリケーションのゲートファサードからポリシーをチェックするときは、2番目のパラメータ$ updatedUserだけを渡す必要があります。

次にあなたがAuthServiceProviderであなたのポリシーを登録する必要があります。

use Acme\User; 
use Acme\Policies\UserPolicy; 
... 

class AuthServiceProvider extends ServiceProvider { 

protected $policies = [ 
    User::class => UserPolicy::class 
] 

あなたが登録し、あなたのポリシーを持っている場合今、あなたはそうのような門のファサードを使用して、アプリ全体でそれを確認することができます:

if(Gate::allows('updateProfile', $user)) { 
    // Your logic goes here 
} 

または、私はdeniesメソッドを使用して多くを好きで、コントローラのメソッドの始めにそれを含めてhttpエラーを返します。

public function edit($id) { 
    if(Gate::denies('updateProfile', $user)) { 
     abort(403, 'You do not have permissions to access this page!'); 
    } 

    // The check is passed and your can include your logic 
} 

また、缶を使用して、ご使用のブレード・ファイルの権限をチェックすることができるので、好きではないことができます。

@can('updateProfile', $user) 
// Show something only to the user that can edit the $user's profile 
@endcan 

詳細情報についてはdocsをご確認ください。

0

あなたはすでにログインしているユーザーIDを渡す必要はありません。そのため、自分自身を編集できる必要があります。そのため、ログインしているユーザーのみをターゲットにする必要があります。

だから、/user/edit/user/updateなど

だけ

Auth::user()->id 

またはそのためだけログインしているユーザー

$user = Auth::user(); 

のような何か他のもののように、現在のユーザーの詳細情報を取得する(ルートを使用することができます自分自身)を編集することができます。

0

ボタンまたはリンクが必要な場合は、クリックするとそのIDが目的のルートに渡されます。

例:ユーザーIDでログインして電流を取得するため

あなたは

$user = Auth::user()->id; 

ようにすればいいし、直接ルートでご

<a href="{{ url('route', Auth::user()->id; }}">Edit</a> 

は今、誰かがクリックしたときのようにそれを得ることができます編集ボタン/リンクでは、経路はroute/currentuseridのようになります。

+0

しかし、ユーザーが別のIDを持つURLを直接入力するのを止めるのは何ですか? –

+0

渡された '$ id'がデータベースに存在しないかどうかをあなたのコントローラで確認し、エラーやメッセージを投げることができます。 –

関連する問題