如何通过在url laravel中输入id来限制用户访问其他用户的页面

时间:2017-05-28 17:14:58

标签: laravel

我有一个网络应用程序,我正在努力。用户可以创建具有唯一身份的患者。我遇到的问题是,当另一个用户登录时,他可以通过简单地在URL中输入他们的ID来轻松访问未分配给他的患者。请问我该如何解决这个问题?以下是我的路线示例 用户查看他的病人:

<?xml version="1.0" encoding="UTF-8"?> <result> <records> <dataProcessed> <FieldName>Tesco</FieldName> <Mode>As Is</Mode> </dataProcessed> <dataProcessed> <FieldName>ASDA</FieldName> <Mode>1</Mode> </dataProcessed> <dataProcessed> <FieldName>Tesco</FieldName> <Mode>2</Mode> </dataProcessed> <dataProcessed> <FieldName>Walmart</FieldName> <Mode>3</Mode> </dataProcessed> </records> <records> <dataProcessed> <FieldName>Orange</FieldName> <Mode>1</Mode> </dataProcessed> <dataProcessed> <FieldName>MTS</FieldName> <Mode>2</Mode> </dataProcessed> </records> </result>

并在Patientcontroller中:

Route::get('patients/{patient}/view', 'Portal\PatientController@viewPatient');

请问我做错了什么?

3 个答案:

答案 0 :(得分:0)

您可以使用policies

  

策略是围绕特定模型或资源组织授权逻辑的类。例如,如果您的应用程序是博客,您可以使用Post模型和相应的PostPolicy来授权用户操作,例如创建或更新帖子。

gates

  

Gates是确定用户是否有权执行给定操作的闭包

我会使用政策,但您也可以手动检查用户是否可以使用以下内容查看网页:

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

答案 1 :(得分:0)

您也可以在不输入GET的情况下让id访问此页面。例如,如果您只想从当前登录的用户获取患者:

web.php

Route::get('patients/view', 'Portal\PatientController@viewPatient');

Patientcontroller

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

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

请注意,这仅适用于经过身份验证的用户。

答案 2 :(得分: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'));
    }
}

这很简单,但却有效。