2017-05-28 10 views
1

私は働いているWebアプリケーションを持っています。ユーザーは一意のIDを持つ患者を作成できます。私が持っている問題は、別のユーザーがログインしたときに、URLにIDを入力するだけで、自分に割り当てられていない患者に簡単にアクセスできることです。どうすればこの問題を解決できますか?彼の患者を表示する ユーザーのための私のルートの相続人サンプル:URL laravelにidを入力して別のユーザーのページにアクセスすることを制限する方法

Route::get('patients/{patient}/view', 'Portal\[email protected]');

とPatientcontrollerで:

public function viewPatient($patient){ 
    $patient = Patient::where('id', $patient)->first(); 
    return view ('portal.patient',compact('patient')); 
} 

してください、私が間違って何をやっていますか?

答えて

0

あなたはそのためのpoliciesを使用することができます。

ポリシーは、特定のモデルまたはリソースの周りに承認ロジックを整理するクラスです。たとえば、アプリケーションがブログの場合、ポストモデルとそれに対応するポストポリシーがあり、投稿の作成や更新などのユーザーアクションを承認することができます。

またはgates

ゲイツは、ユーザーが特定のアクション

を実行するために許可されている場合、私は、ポリシーを使用すると思いますが、場合は、手動でチェックすることができるかを決定クロージャですユーザーは次のようなページを表示できます。

if (auth()->id() !== $patient) { 
    return redirect('/')->with('message', 'You can not view this page'); 
} 
+1

私はポリシーが魔法を行うべきだと思います。私は今それを読んでいる。ありがとう男 –

0

GETidを入力せずにこのページにアクセスしてください。たとえば、あなただけでログインして現在のユーザーからの患者を取得する場合:

web.php

Route::get('patients/view', 'Portal\[email protected]'); 

Patientcontroller

public function viewPatient(){ 
    $id = auth()->id(); 

    $patient = Patient::where('id', $id)->first(); 
    return view ('portal.patient',compact('patient')); 
} 

することは、このことを覚えておいてください認証されたユーザーだけが動作します。

+0

これはうまくいくだろうが、私はただ特定の患者を見たいので、私はURLのIDを渡していた。あなたのテクニックは、複数の患者がいる場合には機能しないかもしれません。 –

+0

ああ大丈夫、私はあなたがすべての患者の患者にのみアクセスしたいと思っていました – Nenroz

0

データベーステーブルの構造は、この

Patients 
-------- 
id //Unique ID of Patient 
user_id //User that created 
patient 

のようなものであるならば、あなたは次のようにコントローラのチェックを行うことができます。

public function viewPatient($patient) 
{ 
    $patient_check = Patient::where('id', $patient)->where('user_id','=',Auth::user()->id)->first(); 
    if($patient_check == null || count($patient_check) == 0) 
    { 
     return "You cannot view this patient"; 
    } 
    else 
    { 
     return view ('portal.patient',compact('patient')); 
    } 
} 

これは簡単ですが、まだ動作します。

+0

はい、これは実際にそれを行います。私はちょうど私が患者を取り出さなければならないときに、いつもすべてのコントローラでそれを定義するという論理が嫌いでした。ありがとう@Ali –

+0

それは仕事をします。あなたがlaravelでプロではない場合、ヘルパー関数を作成することができます。 Nvm。それが印を付けるのを助けるなら:) –

関連する問題