【问题标题】:Access control lists in Symfony2 using FOSUserBundle - adding roles to a userSymfony2 中使用 FOSUserBundle 的访问控制列表 - 向用户添加角色
【发布时间】:2013-08-01 23:19:50
【问题描述】:

我希望这比我一直在阅读的文档更简单。

我有许多与标准 FOSUserbundle 用户实体具有多对一关系的实体,可以登录用户、注册用户、注销等。

class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
    }

我的每个用户也可以拥有许多宠物。 IE。这是猫实体(简化):

class Cat
{
    /**
     * @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;

    /**
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     **/
    private $user_id;

我应该如何添加一个访问控制列表用户角色,该角色定义用户是否有猫,如果有,则允许它们进入我网站的“仅限猫”部分。

注意(稍微相关):当谈到使用原则进行数据库设计时,我感觉有点迟钝,我会投票支持任何可以为我指出一个很好的教程/解释设计具有不同类型连接的东西的人,特别是如果它是在 Symfony/Doctrine 环境中。

【问题讨论】:

    标签: symfony doctrine-orm entity acl fosuserbundle


    【解决方案1】:

    好吧,因为你还没有得到任何其他东西。我会在那里扔一些东西,但到目前为止我的经验只是中等。

    在您的猫主人页面的控制器中,您可以查询用户是否有任何关联的猫实体。

    您需要为您的用户和猫类添加 OneToMany/ManyToOne 注释,并为关联添加一个变量。这你可以直接从 symfony2 书的教义部分复习(如果你正在使用 Symfony2 并且没有花时间阅读这本书,那是使用完整堆栈的最低知识水平,我建议你全部阅读)。 (你真的需要一个只用于猫的实体类吗,你可以有一个带有“类型”选项的宠物实体。)

    检查安全上下文以确保登录,然后查询数据库。

        $em = $this->getDoctrine()->getManager();
    
        $ownersCats = $em->getRepository('PetsPetSiteBundle:Blog')->findBy(array('type'=>'cat'));
    

    或仅针对一个结果

        $ownersCats = $em->getRepository('PetsPetSiteBundle:Blog')->findOneBy(array('type'=>'cat'));
    

    一旦你得到这个结果,如果它返回 false,你就知道他没有猫。否则继续。

    如果您不打算使用该页面上的实体,或者只是执行计数查询并查看它是否大于 0,那么显然您可以通过仅查询 id 或其他内容来提高性能?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2014-06-05
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      相关资源
      最近更新 更多