【发布时间】:2020-04-15 22:16:05
【问题描述】:
我知道通过 url 传递记录 ID 通常不是一个好主意,但我想知道在我的情况下如何避免它:
我的目标是在用户仪表板上列出工作状态并允许用户调整状态。
我创建视图并使用会话将变量传递给它:
userController.php
public function getdashboard()
{
//reading the user information
$arrPageData['user'] = Sentry::getUser();
//reading the job interviews
$arrPageData['jobInterviews'] = JobInterview::readCurrentInterviews($this->userID);
return View::make('clients.dashboard', $arrPageData);
}
这部分效果很好,我不在路线中使用记录 ID。我在仪表板视图中遍历 jobInterviews。根据数据库表中列出的状态,我给用户选项
查看文件:dashboard.blade.php (sn-p)
@foreach ($jobInterviews as $interviews)
@if ($interviews->j == $job->id)
<tbody>
<tr>
<td>
{{$interviews->contact_name}}
@if ($interviews->status == 'interview request accepted')
<a href="#" class="btn btn-danger btn-small" data-toggle="modal" data-target=".mymodal{{ $interviews->interview_id }}">Hire</a>
@elseif ($interviews->status == 'hired')
<button id="complete" class="btn btn-info btn-small">Mark Project Complete</button>
@endif
</td>
<td>{{$interviews->status}} </td>
</tr>
</tbody>
...
我遇到的问题是为了完成作业状态更改,我正在调用该方法并传入记录ID:
仍在dashboard.blade.php中
<form action="../jobs/offer/{{$interviews->interview_id}}" method="post">
然后路由通过:
Route::post('/jobs/offer/{id}','JobController@jobOffer');
一切都如我所愿,但从安全的角度来看,我认为我的做法并不正确。从我遍历的数组中获取数据时,除了使用路由中的记录 id 之外,还有更好的方法来调用 jobOffer 方法并更改状态吗?
提前感谢您的帮助。
【问题讨论】:
-
将其添加为表单变量,
<form action="../jobs/offer" method="post"><input type="hidden" name="id" value="{$interviews->interview_id}">不是路由参数,然后以正常方式访问它 - 无论$_POST['id']周围的 laravel 包装器是什么 -
@user574632 用户不能同时更改隐藏字段的默认值吗?
-
是的,他们可以——您总是需要验证用户输入。如果您担心一个用户可以编辑另一个用户的详细信息,那么您需要重构以包括一些检查服务器端,该用户实际上可以访问详细信息,sudo 代码:
if(user->canEdit($id){//do edit} -
@user574632 好的,谢谢。这为我解决了这个问题。我很感激。
-
发送 bu 操作和路由方法在用户的控制之下,因为它们出现在 url 中。