现在,当用户尝试保存/编辑他们不应该做的事情时(可能是通过黑客攻击表单来提交某些数据),我用403中止了
public function store() {
$data = $_POST;
if(!array_key_exists('company_id',$data)) {
$data['company_id'] = Auth::user()->company_id;
}
if(!(Auth::user()->hasRole('super') || $data['company_id'] == Auth::user()->company_id)) App::abort(403,"Cannot edit customers that do not belong to your company");
...
我没有可以抛出某种异常,是吗?我不喜欢硬编码#403; 403"无处不在,我不确定这是最好的事情。
我想我想将用户踢到某种错误页面,这些页面会因为他们的不良行为而责骂他们并在某处记录黑客攻击。
答案 0 :(得分:1)
我通常会使用路由过滤器执行此操作。这使得它在它到达路线之前检查auth是否通过。您可以在application / routes.php文件中添加以下内容:
Route::filter('company', function()
{
if(!(Auth::user()->hasRole('super')
|| Input::get('company_id', Auth::user()->company_id)
== Auth::user()->company_id)) {
//do stuff to log that this happened
return Redirect::to('your_error_page');
}
});
Route::any('store', array('before' => 'company', function()
{
//this would be your function "store"
return View::make('store');
});
所以,这就是你的商店路线,在我们运营之前,我们首先要确保它通过"公司"过滤器 - 检查他们是否具有角色" super"或者,如果提交的company_id等于用户的公司ID(或者如果他们没有提交company_id,我们会将其默认为用户的公司ID,在这种情况下我们知道它会通过)。
如果它没有通过过滤器,我们会以您想要的任何方式记录这种情况,然后将它们重定向到错误页面。
但是现在,只要你想确保满足company_id条件,你就可以添加" company"到"之前"路线的一部分。