微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

laravel灯塔中间件 v5.10

如何解决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 举报,一经查实,本站将立刻删除。