@Security with External type declaration - error
ameoba32 opened this issue · comments
I am getting next error when using @Security with External type declaration.
Version: 5.0.3
"array_combine(): Argument #1 ($keys) and argument #2 ($values) must have the same number of elements"
vendor/thecodingmachine/graphqlite/src/Middlewares/SecurityFieldMiddleware.php:132
I've tried to debug the issue myself, it has something related with first parameter, which is always there. But no luck. If I comment out array_combine in SecurityFieldMiddleware.php:132 it seems to work.
Consider next php code example:
namespace App\Types;
use TheCodingMachine\GraphQLite\Annotations\Type;
use TheCodingMachine\GraphQLite\Annotations\Field;
use TheCodingMachine\GraphQLite\Annotations\Security;
use App\Entities\Product;
/**
* @Type(class=Product::class)
*/
class ProductType
{
/**
* @Field
* @Security("this.canAccess()")
*/
public function getId(Product $product): string
{
return $product->getId();
}
public function canAccess(): bool
{
return true;
}
}
thanks.
@ameoba32 Can you create a testcase for this, demonstrating the error, so we can work through it? Also, any reason you're not using the latest version?
@ameoba32 this seems to be caused by the fact that all parameters are expected to map 1:1 to what the GQL schema exposes.
i think you could get this working by just adding a Ignore
annotation/attribute for the $product parameter.
@Lappihuan Can you show the code sample?
I think I will just drop the idea of using separate classes for type declaration and convert Types to Entities that I already have. External types does not work with security.
It made sense when I started to use graphqlite lib, wasn't sure about how it would go. After approx 1 year I am quite happy with results and will incorporate types directly into existing classes.