Php Laravel 5.6策略在远程服务器上无法正常工作
我创建了一个名为Php Laravel 5.6策略在远程服务器上无法正常工作,php,laravel,laravel-5,laravel-authorization,Php,Laravel,Laravel 5,Laravel Authorization,我创建了一个名为LetterPolicy的策略,这是代码 这是authserviceprovider 在下面的代码中,我检查用户 class LetterController extends Controller { protected $user; public function __construct() { $this->middleware(function ($request, $next){ $this->user = Auth::user();
LetterPolicy
的策略,这是代码
这是authserviceprovider
在下面的代码中,我检查用户
class LetterController extends Controller
{
protected $user;
public function __construct()
{
$this->middleware(function ($request, $next){
$this->user = Auth::user();
return $next($request);
});
}
public function edit(Letter $letter)
{
if($this->user->can('update', $letter)){
//edit
}
else
abort('403', 'Access Denied');
}
代码在本地主机上运行良好,但在远程服务器上,它报告了拒绝访问
错误。我在服务器上部署站点后创建了此策略,因此我使用代码创建了一个路由/clear cache
Route::get('/clear-cache', function() {
$exitCode = \Illuminate\Support\Facades\Artisan::call('cache:clear');
});
在创建策略后清除缓存。但它仍然报告
403
错误。问题出在哪里?我尝试了dd($this->user->id==$letter->user|id|this->user->role|id==1)在控制器中输入code>,然后返回false
。我尝试了dd($this->user->id=$letter->user|id |$this->user->role_id==1)代码>并且它是真的
。现在它工作了,但我不知道为什么 我尝试了dd($this->user->id==$letter->user|id|this->user->role|id==1)在控制器中输入code>,然后返回false
。我尝试了dd($this->user->id=$letter->user|id |$this->user->role_id==1)代码>并且它是真的
。现在它工作了,但我不知道为什么 Fjarlaegur的回答是关键。我也遇到了同样的问题:在localhost中没有问题,但在生产服务器中,由于比较运算符的原因,每次授权都失败了。从===变为==一切都一样好。Fjarlaegur的答案是关键。我也遇到了同样的问题:在localhost中没有问题,但在生产服务器中,由于比较运算符的原因,每次授权都失败了。已从===更改为==且一切正常。请检查策略类文件的权限,并尝试运行composer dump-autoload@SyedFaisal如何在服务器上运行composer?您是否具有服务器的ssh访问权限?是的,我具有访问权限用户是否可以实际编辑信函?可能您的数据错误,策略工作正常?请检查策略类文件的权限,并尝试运行composer dump-autoload@SyedFaisal如何在服务器上运行composer?您是否具有服务器的ssh访问权限?是的,我具有访问权限用户是否可以实际编辑信函?可能是您的数据错误,而策略工作正常?是您做的==
,而不是=
。使用==
将强制执行相同的类型比较,并且不会像=
那样执行隐藏类型转换。请注意,$this->user->id
和$letter->user\u id
不是同一类型,或者$this->user->role\u id
不是整数。通过使用==
它不会比较类型,因此它将返回true。尝试dd()
变量,然后您可以在浏览器中看到类型。您使用了==
而不是=
。使用==
将强制执行相同的类型比较,并且不会像=
那样执行隐藏类型转换。请注意,$this->user->id
和$letter->user\u id
不是同一类型,或者$this->user->role\u id
不是整数。通过使用==
它不会比较类型,因此它将返回true。尝试dd()
变量,然后您可以在浏览器中看到类型。
class LetterController extends Controller
{
protected $user;
public function __construct()
{
$this->middleware(function ($request, $next){
$this->user = Auth::user();
return $next($request);
});
}
public function edit(Letter $letter)
{
if($this->user->can('update', $letter)){
//edit
}
else
abort('403', 'Access Denied');
}
Route::get('/clear-cache', function() {
$exitCode = \Illuminate\Support\Facades\Artisan::call('cache:clear');
});