gpt4 book ai didi

php - Gate::不允许在 Laravel 5.3 中工作

转载 作者:行者123 更新时间:2023-12-01 08:51:50 25 4
gpt4 key购买 nike

我在 Laravel 5.3 上遇到了新问题 Gate::allows方法。

这是我的 AuthServiceProvider.php测试:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];

/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();

Gate::define('settings', function ($user)
{
return true;
});
}
}

通常,无论用户的角色如何,每个人都可以访问设置。

但这总是显示“否”而不是“确定”。
<?php

namespace App\Http\Controllers;

use Gate;
use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class SettingsController extends Controller
{
public function __construct(Request $request)
{
echo Gate::allows('settings') ? 'ok' : 'no';
}
}

最佳答案

从 Laravel 5.3 开始,我们无法在 Controller 构造函数中访问 session 或经过身份验证的用户,如 upgrade guide 中所述。

Gate外墙使用 User模型,可能它试图访问用户,但它在 Controller 的构造函数中还没有准备好

所以,你应该考虑使用中间件来检查 Gate .您还可以直接在 Controller 构造函数中使用基于闭包的中间件:

public function __construct(Request $request)
{
$this->middleware(function ($request, $next) {
echo Gate::allows('settings') ? 'ok' : 'no';
});
}

关于php - Gate::不允许在 Laravel 5.3 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39426958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com