我有一个网络应用程序,我正在努力。用户可以创建具有唯一身份的患者。我遇到的问题是,当另一个用户登录时,他可以通过简单地在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');
请问我做错了什么?
答案 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'));
}
}
这很简单,但却有效。