如何解决laravel灯塔中间件 v5.10
我正在尝试根据用户角色保护我的查询。由于 @middleware()
指令在当前版本的灯塔中不可用,我尝试实现自定义指令。它没有按预期工作,我的查询没有受到保护。
我的自定义CanAccessDirective
<?PHP
namespace App\GraphQL\Directives;
use Closure;
use GraphQL\Type\DeFinition\ResolveInfo;
use Nuwave\Lighthouse\Exceptions\DeFinitionException;
use Nuwave\Lighthouse\Schema\Directives\BaseDirective;
use Nuwave\Lighthouse\Schema\Values\FieldValue;
use Nuwave\Lighthouse\Support\Contracts\FieldMiddleware;
use Nuwave\Lighthouse\Support\Contracts\GraphQLContext;
class CanAccessDirective extends BaseDirective implements FieldMiddleware
{
public static function deFinition(): string
{
return /** @lang GraphQL */ <<<GRAPHQL
"""
Limit field access to users of a certain role.
"""
directive @canAccess(
"""
The name of the role authorized users need to have.
"""
requiredRole: String!
) on FIELD_DEFinitioN
GRAPHQL;
}
public function handleField(FieldValue $fieldValue,Closure $next): FieldValue
{
$originalResolver = $fieldValue->getResolver();
return $next(
$fieldValue->setResolver(
function ($root,array $args,GraphQLContext $context,ResolveInfo $resolveInfo) use ($originalResolver) {
$requiredRole = $this->directiveArgValue('requiredRole');
// Throw in case of an invalid schema deFinition to remind the developer
if ($requiredRole === null) {
throw new DeFinitionException("Missing argument 'requiredRole' for directive '@canAccess'.");
}
$user = $context->user();
if (
! $user
|| !$user->hasRole(explode('|',$requiredRole))
) {
return null;
}
return $originalResolver($root,$args,$context,$resolveInfo);
}
)
);
}
}
我的疑问
type Query @canAccess(requiredRole: "admin") {
users: [User!]! @paginate(defaultCount: 10)
user(id: ID @eq): User @find
}
没有错误或日志。它只是不起作用。我错过了什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。