2017-06-02 170 views
0

我有一个策略,用于检查经过身份验证的用户是否可以删除顾问。Laravel策略返回未经授权

不幸的是,答复总是未经授权,我不确定为什么!

政策功能(ClinicConsultantPolicy):

public function delete(User $user, Consultant $consultant) 
    { 
     $consultant_clinic_id = $consultant->clinic_id; 
     return $user->clinic->id === $consultant_clinic_id; 

    } 

控制器调用上面的函数(ClinicConsultantController):

public function destroy($id) 
    { 
     $consultant = Consultant::find($id); 
     $this->authorize('delete', $consultant); 

     Consultant::find($id)->delete(); 

     return redirect('clinic/consultants'); 
    } 

如果我输出的两个变量的政策尝试匹配(用户诊所ID和顾问诊所ID)都等于2.

但是,很显然,其中的一个在达到政策时或者不是2,或者可能是未定义的,但我不确定为什么?非常感谢您的帮助。

+1

您是否注册了保单?尝试在删除策略中添加dd($ user-> clinic-> id,$ consultant-> clinic_id)'以验证它是否被调用并检查值。 – Sandeesh

+0

你说得很对,我忘了注册政策!这样的疏忽!非常感谢@Sandeesh。 – Ben

回答

0

对我来说,看起来像一个模型关系问题,当调用$user->clinic->id。如果您提供关系实施,这将非常有帮助。如果您的关系设置为一对多,我只能建议编写 $user->clinic()->first()->id。欢呼声

相关问题