Symfony在字符串上调用成员函数getRole()

时间:2015-10-21 08:41:39

标签: php symfony

我在用户授权方面遇到了麻烦。

这是我的用户

namespace AppBundle\Entity;

use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User implements UserInterface
{
     /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     *
     * @var int id
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=25)
     *
     * @var string username
     */
    protected $username;

    /**
     * @ORM\Column(type="string", length=25)
     *
     * @var string password
     */
    protected $password;

    /**
     * @ORM\Column(type="string", length=25)
     *
     * @var string firstName
     */
    protected $firstName;

    /**
     * @ORM\Column(type="string", length=25)
     *
     * @var string lastName
     */
    protected $lastName;

    /**
     * @ORM\Column(type="string", length=25)
     *
     * @var string email
     */
    protected $email;

    /**
     * @ORM\Column(type="string", length=255)
     *
     * @var string salt
     */
    protected $salt;

    /**
     * @ORM\ManyToMany(targetEntity="Role")
     * @ORM\JoinTable(name="user_role",
     *     joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
     * )
     *
     * @var ArrayCollection $userRoles
     */
    protected $userRoles;

    public function __construct()
    {
        $this->posts = new ArrayCollection();
        $this->userRoles = new ArrayCollection();
        $this->createdAt = new \DateTime();
    }

    public function getId()
    {
    return $this->id;
    }

    public function getUsername()
    {
    return $this->username;
    }

    public function getPassword()
    {
    return $this->password;
    }

    public function getFirstName()
    {
    return $this->firstName;
    }

    public function getLastName()
    {
    return $this->lastName;
    }

    public function getEmail()
    {
    return $this->email;
    }

    public function getSalt()
    {
        return $this->salt;
    }

    public function getUserRoles()
    {
        return $this->userRoles;
    }

    public function getRoles()
    {
        return $this->getUserRoles()->toArray();
    }

    public function setUsername($username)
    {
    $this->username = $username;
    }

    public function setPassword($password)
    {
    $this->password = $password;
    }

    public function setFirstName($firstName)
    {
    $this->firstName = $firstName;
    }

    public function setLastName($lastName)
    {
    $this->lastName = $lastName;
    }

    public function setEmail($email)
    {
    $this->email = $email;
    }

    public function setSalt($value)
    {
        $this->salt = $value;
    }

    public function eraseCredentials()
    {

    }

    public function equals(UserInterface $user)
    {
        return md5($this->getUsername()) == md5($user->getUsername());
    }
}

这是我的角色

namespace AppBundle\Entity;

use Symfony\Component\Security\Core\Role\RoleInterface;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="role")
 */
class Role implements RoleInterface
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     *
     * @var integer $id
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=255)
     *
     * @var string $name
     */
    protected $name;

    /**
     * @ORM\Column(type="datetime", name="created_at")
     *
     * @var DateTime $createdAt
     */
    protected $createdAt;

    /**
     * Геттер для id.
     *
     * @return integer The id.
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Геттер для названия роли.
     *
     * @return string The name.
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Сеттер для названия роли.
     *
     * @param string $value The name.
     */
    public function setName($value)
    {
        $this->name = $value;
    }

    /**
     * Геттер для даты создания роли.
     *
     * @return DateTime A DateTime object.
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    /**
     * Конструктор класса
     */
    public function __construct()
    {
        $this->createdAt = new \DateTime();
    }

    /**
     * Реализация метода, требуемого интерфейсом RoleInterface.
     * 
     * @return string The role.
     */
    public function getRole()
    {
        return $this->getName();
    }
}

RoleHierarchy.php     / *      *此文件是Symfony包的一部分。      *      *(c)Fabien Potencier      *      *有关完整的版权和许可信息,请查看许可      *与此源代码一起分发的文件。      * /

namespace Symfony\Component\Security\Core\Role;

/**
 * RoleHierarchy defines a role hierarchy.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class RoleHierarchy implements RoleHierarchyInterface
{
    private $hierarchy;
    protected $map;

    /**
     * Constructor.
     *
     * @param array $hierarchy An array defining the hierarchy
     */
    public function __construct(array $hierarchy)
    {
        $this->hierarchy = $hierarchy;

        $this->buildRoleMap();
    }

    /**
     * {@inheritdoc}
     */
    public function getReachableRoles(array $roles)
    {
        $reachableRoles = $roles;
        foreach ($roles as $role) {
            if (!isset($this->map[$role->getRole()])) {
                continue;
            }

            foreach ($this->map[$role->getRole()] as $r) {
                $reachableRoles[] = new Role($r);
            }
        }

        return $reachableRoles;
    }

    protected function buildRoleMap()
    {
        $this->map = array();
        foreach ($this->hierarchy as $main => $roles) {
            $this->map[$main] = $roles;
            $visited = array();
            $additionalRoles = $roles;
            while ($role = array_shift($additionalRoles)) {
                if (!isset($this->hierarchy[$role])) {
                    continue;
                }

                $visited[] = $role;
                $this->map[$main] = array_unique(array_merge($this->map[$main], $this->hierarchy[$role]));
                $additionalRoles = array_merge($additionalRoles, array_diff($this->hierarchy[$role], $visited));
            }
        }
    }
}

我收到下一个错误 - RoleHierarchy.php第43行中的FatalErrorException:错误:在字符串上调用成员函数getRole()

我该如何解决这个问题?

0 个答案:

没有答案