在中间件之后执行服务提供者
Executing Service Provider after Middleware
我正在使用 jwt-auth,但我需要对服务提供商做一些事情(政策方面的东西),我需要获得登录的用户。
"boot" 功能对我不起作用。知道如何在 jwt-auth 之后 运行 服务提供商吗?
<?php
namespace App\Providers;
use CareerTown\Privileges\PrivilegesHolder;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* Register any application authentication / authorization services.
*
* @param \Illuminate\Contracts\Auth\Access\Gate $gate
* parent::registerPolicies($gate);
*
* @return void
*/
public function boot(GateContract $gate)
{
parent::boot($gate);
if ( ! auth()->check()) {
return false;
}
$userPrivileges = auth()->user()->privileges;
$privilegesHolder = PrivilegesHolder::getInstance();
foreach ($userPrivileges as $up) {
if ($privilege = $privilegesHolder->getLevel($up->level)) {
$privileges = array_dot($privilege->getPrivileges());
foreach ($privileges as $key => $value) {
$gate->define($key.$up->company->key, function ($user, $object = null) use ($value, $up) {
if ($object->profile->user_id == $user->id) {
return true;
}
if ($object->id == $up->company_id) {
return boolval($value);
}
return false;
});
}
}
}
}
}
您可以扩展 jwt-auth 中间件并用您的服务提供商内容覆盖 handle 函数。或者您可以注册自己的中间件以在 jwt-auth 中间件之后检查您的策略。
也许这个提示有帮助
我正在使用 jwt-auth,但我需要对服务提供商做一些事情(政策方面的东西),我需要获得登录的用户。
"boot" 功能对我不起作用。知道如何在 jwt-auth 之后 运行 服务提供商吗?
<?php
namespace App\Providers;
use CareerTown\Privileges\PrivilegesHolder;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* Register any application authentication / authorization services.
*
* @param \Illuminate\Contracts\Auth\Access\Gate $gate
* parent::registerPolicies($gate);
*
* @return void
*/
public function boot(GateContract $gate)
{
parent::boot($gate);
if ( ! auth()->check()) {
return false;
}
$userPrivileges = auth()->user()->privileges;
$privilegesHolder = PrivilegesHolder::getInstance();
foreach ($userPrivileges as $up) {
if ($privilege = $privilegesHolder->getLevel($up->level)) {
$privileges = array_dot($privilege->getPrivileges());
foreach ($privileges as $key => $value) {
$gate->define($key.$up->company->key, function ($user, $object = null) use ($value, $up) {
if ($object->profile->user_id == $user->id) {
return true;
}
if ($object->id == $up->company_id) {
return boolval($value);
}
return false;
});
}
}
}
}
}
您可以扩展 jwt-auth 中间件并用您的服务提供商内容覆盖 handle 函数。或者您可以注册自己的中间件以在 jwt-auth 中间件之后检查您的策略。
也许这个提示有帮助