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()