symfony - Symfony2 - Security Role - From PHP 5.3 to PHP >5.4 - getRole() on a non-object -


i had @ issue : https://github.com/symfony/symfony/issues/3691

my problem can't find solution make work.

i use symfony 2.8.3

here error had :

fatalerrorexception in rolehierarchy.php line 43: error: call member function getrole() on non-object 

i serialized properly, here classes :

user

<?php /**  */  namespace cnamts\phpk\securitybundle\security\user;  use symfony\component\security\core\user\userinterface; use cnamts\phpk\securitybundle\security\role;  /**  * classe abstraite implémentant la classe symfony userinterface.  */ abstract class user implements userinterface {     public function __construct() {         $this->roles = array();     }      /**      * concaténation du nom et du numéro d'agent : nom-numero.      *      * @var string      */     protected $ismum;     /**      * nom de l'utilisateur.      *      * @var string      */     protected $nom;     /**      * prénom de l'utilisateur.      *      * @var string      */     protected $prenom;     /**      * id de l'utilisateur.      *      * @var string      */     protected $id;     /**      * numéro d'agent.      *      * @var string      */     protected $chrono;     /**      * code de l'organisme      *      * @var string      */     protected $codeorganisme;     /**      * numéro siret de l'organisme.      *      * @var string      */     protected $siret;     /**      * services accessmaster de l'utilisateur.      *      * @var array(symfony\component\security\core\role\role)      */     protected $roles;     /**      * système de l'utilisateur.      *      * @var string      */     protected $systeme;      /**      * défini l'ismum (concaténation du nom et du numéro d'agent : nom-numero).      *      * @param string $ismum      */     public function setismum($ismum)     {         $this->ismum = $ismum;     }     /**      * retourne l'ismum (concaténation du nom et du numéro d'agent : nom-numero).      *      * @return string      */     public function getismum()     {         return $this->ismum;     }     /**      * défini le nom de l'utilisateur.      *      * @param string $nom      */     public function setnom($nom)     {         $this->nom = $nom;     }     /**      * retourne le nom de l'utilisateur.      *      * @return string      */     public function getnom()     {         return $this->nom;     }     /**      * défini le prénom de l'utilisateur.      *      * @param string $prenom      */     public function setprenom($prenom)     {         $this->prenom = $prenom;     }     /**      * retourne le nom de l'utilisateur.      *      * @return string      */     public function getprenom()     {         return $this->prenom;     }     /**      * défini l'id de l'utilisateur.      *      * @param string $id      */     public function setid($id)     {         $this->id = $id;     }     /**      * retourne l'id de l'utilisateur.      *      * @return string      */     public function getid()     {         return $this->id;     }     /**      * défini le numéro d'agent.      *      * @param string $chrono      */     public function setchrono($chrono)     {         $this->chrono = $chrono;     }     /**      * retourne le numéro d'agent.      *      * @return string      */     public function getchrono()     {         return $this->chrono;     }     /**      * défini le code organisme      * @param string $codeorganisme      */     public function setcodeorganisme($codeorganisme)     {         $this->codeorganisme = $codeorganisme;     }     /**      * retourne le code organisme      * @return string      */     public function getcodeorganisme()     {         return $this->codeorganisme;     }     /**      * défini le siret de l'utilisateur.      *      * @param string $siret      */     public function setsiret($siret)     {         $this->siret = $siret;     }     /**      * retourne le siret de l'utilisateur.      *      * @return string      */     public function getsiret()     {         return $this->siret;     }      /**      * ajoute un service accessmaster à l'utilisateur.      *      * @param string $role      */     public function addrole(role $role)     {         $this->roles[] = $role;     }     /**      * retourne les services accessmaster de l'utilisateur.      *      * @return array(cnamts\phpk\securitybundle\security\role)      */     public function getroles()     {         return $this->roles;     }      /**      * défini le système de l'utilisateur.      *      * @param string $systeme      */     public function setsysteme($systeme)     {         $this->systeme = $systeme;     }     /**      * retourne le système de l'utilisateur.      *      * @return string      */     public function getsysteme()     {         return $this->systeme;     }      /**      * @ignore      */     public function erasecredentials()     {     }      /**      * permet de tester si deux instances de userinterface sont égales.      *      * @param userinterface $user      *      * @return boolean      */     public function equals(userinterface $user)     {         if (!$user instanceof user) {             return false;         }          if ($this->username !== $user->getusername()) {             return false;         }         if ($this->organisme !== $user->getorganisme()) {             return false;         }         if ($this->jeton !== $user->getjeton()) {             return false;         }          return true;     }      /**      * retourne true si l'utilisateur possède le service passé en paramètre      * prend en paramètre une chaîne ou un tableau de chaînes.      *      * @param mixed $role      *      * @return boolean      */     public function isgranted($role)     {         if (is_array($role)) {             foreach ($role $r) {                 foreach ($this->getroles() $own) {                     if ($own->getrole() === $r) {                         return true;                     }                 }             }         } elseif (is_string($role)) {             foreach ($this->getroles() $own) {                 if ($own->getrole() === $role) {                     return true;                 }             }         }          return false;     }      /**      * @ignore      */     public function getusername()     {         return $this->getismum();     }     /**      * @ignore      */     public function getpassword()     {         return;     }     /**      * @ignore      */     public function getsalt()     {         return;     } } 

implementation of abstract user

<?php namespace cnamts\phpk\securitybundle\security\user;  /**  * classe décrivant un user lorsque le mode accessmaster pour la sécurité est activé.  */ class accessmasteruser extends user implements \serializable {     public function serialize()     {         return \json_encode(array(             $this->civilite,             $this->chrono,             $this->codeorganisme,             $this->id,             $this->ismum,             $this->nom,             $this->prenom,             serialize($this->roles),             $this->siret,             $this->systeme         ));     }     public function unserialize($serialized)     {         list(             $this->civilite,             $this->chrono,             $this->codeorganisme,             $this->id,             $this->ismum,             $this->nom,             $this->prenom,             $roles,             $this->siret,             $this->systeme         ) = \json_decode($serialized);          $this->roles = unserialize($roles);     }      /**      * civilité de l'utilisateur.      *      * @var string      */     private $civilite;      /**      * défini la civilité de l'utilisateur.      *      * @param string $civilite      */     public function setcivilite($civilite)     {         $this->civilite = $civilite;     }     /**      * retourne la civilité de l'utilisateur.      *      * @return string      */     public function getcivilite()     {         return $this->civilite;     } } 

role

<?php namespace cnamts\phpk\securitybundle\security;  use symfony\component\security\core\role\roleinterface;  class role implements roleinterface, \serializable {     private $role;     private $attributes;      public function serialize() {         return \json_encode(array(             $this->role,             $this->attributes         ));     }      public function unserialize($serialized) {         list(             $this->role,             $this->attributes         ) = \json_decode($serialized);     }      /**      * constructor.      *      * @param string $role role name      */     public function __construct($role, $attributes = array())     {         $this->role = (string) $role;         $this->attributes = $attributes;     }      /**      * {@inheritdoc}      */     public function getrole()     {         return $this->role;     }      /**      * {@inheritdoc}      */     public function getattributes()     {         return $this->attributes;     } } 

just after login, roles ok, users.roles , roles same :

first page

but when go page, got :

second page

what wrong in code ? why working on php 5.3.3, doesn't work on php 5.4.40 or php 5.5.28 ?

thanks in advance, i'm totally blocked.

i think answer problem is in linked bug, github user sharom points out here , here.

so seems problem you're including user::$roles serialization/unserialization of user class when don't have to.

p.s. think it's weird , improper you're using json_*() mechanism behind serializable interface.


Comments

Popular posts from this blog

java - Suppress Jboss version details from HTTP error response -

gridview - Yii2 DataPorivider $totalSum for a column -

Sass watch command compiles .scss files before full sftp upload -