繁体   English   中英

Symfony Security无法看到用户角色

[英]Symfony Security not see roles for user

我为用户创建了ManyToMany角色,现在symfony看不到我的用户的角色,我也不知道为什么。现在,我可以输入路径下方的每个路由:^ /,为什么? 以及如何让Symfony知道我的用户中扮演什么角色,我不明白。 用户担任多个角色时的屏幕和屏幕- 屏幕

         - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }

而在我尝试的ROLE_FREELANCER动作中,它被授予并具有所有错误

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

如何正确设置security.yml或我做错了什么?

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  }

实体角色

 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;
}
}

实体用户

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

}

嗯,我不知道这是否对您有帮助,但是由于我是symfony的新手,并且对此了解不多,所以我使用了Symfony用户捆绑包。 它可以安全地处理注册,登录和其他功能。 我使用它来担任更多角色,并为页面建立一些安全性。 如果我错了,请纠正我。

编辑:

这是文档,易于使用。 http://symfony.com/doc/current/bundles/FOSUserBundle/index.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM