0
votes

I create ManyToMany roles for user and now symfony not see role for my user and I dont know why Now I can enter every routing who which is below the path: ^/, why? And how to Symfony know what role in my user, I'm not understand. Screen and screen when user have many roles - screen

         - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }

And in action for ROLE_FREELANCER I try is Granted and have all false

    $security = $this->get('security.context');
    $admin = $security->isGranted('ROLE_ADMIN'); // have false
    $freel = $security->isGranted('ROLE_FREELANCER'); //have false

How to correct setting security.yml or what I'm doing wrong??

security.yml:

security:
encoders:
    Artel\ProfileBundle\Entity\Users:
        algorithm:        sha1
        encode_as_base64: false
        iterations:       1

    Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_CLIENT:   ROLE_CLIENT
    ROLE_COMPANY:  ROLE_COMPANY,
    ROLE_FREELANCER: ROLE_FREELANCER
    ROLE_ADMIN:    ROLE_ADMIN

providers:
    user:
        entity:
            class: ArtelProfileBundle:Users
            property: email
    chain_provider:
        chain:
            providers: [user_db, in_memory]
            providers: [user_dev, in_memory]
    user_db:
        entity: { class: Artel\ProfileBundle\Entity\Users, property: email }
    in_memory:
       memory:
         users:
            admin_tyty: { password: adminpass_tyty, roles: [ 'ROLE_ADMIN' ] }


firewalls:
    default:
        anonymous: ~
        http_basic: ~
        form_login:
            login_path: /login
            check_path: /login_check
        logout:
              path:   /logout
              invalidate_session: false

    main:
        pattern: ^/
        anonymous: ~
        security: true
        form_login:
            provider: user
            login_path: login
            check_path: login_check
            username_parameter: login[email]
            use_referer: true
        logout:
            path: logout
            target: /

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: ROLE_ADMIN }
    - { path: ^/sonata-admin/, roles: ROLE_ADMIN }
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/company, roles:  ROLE_COMPANY  }
    - { path: ^/profile, roles:  ROLE_FREELANCER  }
    - { path: ^/clients, roles:  ROLE_CLIENT  }
    - { path: ^/customer/developers/profile/get, roles:  IS_AUTHENTICATED_ANONYMOUSLY  }
    - { path: ^/customer/developers/bit, roles:  IS_AUTHENTICATED_ANONYMOUSLY  }
    - { path: ^/customer/developers/bitGet, roles:  IS_AUTHENTICATED_ANONYMOUSLY  }

entity roles

 class Role implements RoleInterface
{

/**
 * @ORM\ManyToMany(targetEntity="Users", mappedBy="userRoles")
 *
 */
private $users;

public function __construct()
{
    $this->users = new ArrayCollection();
}

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

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


/*
 * methods for RoleInterface
*/
public function getRole()
{
    $this->getName();
}

/**
 * Get id
 *
 * @return integer
 */
public function getId()
{
    return $this->id;
}

/**
 * Set name
 *
 * @param string $name
 * @return Role
 */
public function setName($name)
{
    $this->name = $name;

    return $this;
}

/**
 * Get name
 *
 * @return string
 */
public function getName()
{
    return $this->name;
}

/**
 * Add users
 *
 * @param \Artel\ProfileBundle\Entity\Users $users
 * @return Role
 */
public function addUser(\Artel\ProfileBundle\Entity\Users $users)
{
    $this->users[] = $users;

    return $this;
}

/**
 * Remove users
 *
 * @param \Artel\ProfileBundle\Entity\Users $users
 */
public function removeUser(\Artel\ProfileBundle\Entity\Users $users)
{
    $this->users->removeElement($users);
}

/**
 * Get users
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getUsers()
{
    return $this->users;
}
}

entity users

   class Users implements UserInterface
  {
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @Expose()
 * @ORM\GeneratedValue(strategy="AUTO")
 * @Groups({"for_vip", "for_all_projects", "for_profile_project"})
 */
protected $id;

/**
 * @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
 * @ORM\JoinTable(name="user_roles")
 *
 */
private $userRoles;

----------------------Method for Userinterface----------------------

/**
 * Get salt
 *
 * @return string
 */
public function getSalt()
{
    return '';
}

/**
 * @inheritDoc
 */
public function eraseCredentials() { }

/**
 * Геттер для ролей пользователя.
 *
 * @return ArrayCollection A Doctrine ArrayCollection
 */
public function getUserRoles()
{
    return $this->userRoles;
}

/**
 * Геттер для массива ролей.
 *
 * @return array An array of Role objects
 */
public function getRoles()
{
    return $this->getUserRoles()->toArray();
}

----------------------End method for Userinterface----------------------


----------------------Additional Method for Role----------------------
/**
 * Add userRoles
 *
 * @param \Artel\ProfileBundle\Entity\Role $userRoles
 * @return Users
 */
public function addUserRole(\Artel\ProfileBundle\Entity\Role $userRoles)
{
    $this->userRoles[] = $userRoles;

    return $this;
}

/**
 * Remove userRoles
 *
 * @param \Artel\ProfileBundle\Entity\Role $userRoles
 */
public function removeUserRole(\Artel\ProfileBundle\Entity\Role $userRoles)
{
    $this->userRoles->removeElement($userRoles);
}




public function setRole(RoleInterface $role)
{
    if (!$this->userRoles->contains($role)) {
        $this->userRoles->add($role);
    }

    return $this;
}

----------------------End additional Method for Role----------------------

}

1

1 Answers

0
votes

Hmm, I dont know if this will help you but because I am new to symfony and dont know much about it, I used the Friends of Symfony User Bundle. It handles registration, login and some more features with security. I use it to have more roles and build some security in for my pages. Please correct me if I am wrong.

Edit:

This is the documentation, easy to use. http://symfony.com/doc/current/bundles/FOSUserBundle/index.html