TokenInterface $token->getUser() не возвращает объект

Я делаю RESTful API CheeseListing с ApiPlatform.

Я сделал избиратель для моего объекта CheeseListing:

      class CheeseListingVoter extends Voter
{

...

protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
    $user = $token->getUser();
    // if the user is anonymous, do not grant access
    if (!$user instanceof UserInterface) {
    return false;
}

/** $var CheeseListing $subject */

// ... (check conditions and return true to grant permission) ...
switch ($attribute) {
    case 'EDIT':
        if($subject->getOwner() === $user){
            return true;
        }
...

Почему $subject->getOwner() === $userвернуть истину, когда $token->getUser()является объектом и $subject->getOwner()это Iri "/api/users/1"

2 ответа

Ответ: Несмотря на то, что ApiResource /api/CheeseListing/Get Endpoint возвращает Iri пользователя: как


Поле владельца на самом деле является объектом. ApiResource имеет собственную функцию для преобразования Iri в объекты и наоборот.

То же самое относится и к публикации /api/CheeseListing, вы получаете следующее:

      {
    "title": "..."
    "owner": "/api/users/1"
}

Он фактически преобразуется из "/api/users/1"к объекту пользователя

Не используйте if() и попробуйте с идентификатором, потому что в вашем пользователе сущности я не думаю, что у вас есть getOwner(). Попробуй это :

      switch ($attribute) {
    case 'EDIT':
        return $subject->getId() === $user->getId()
Другие вопросы по тегам