授予高级用户直接运行SQL查询的权限

时间:2017-12-25 19:32:16

标签: mysql symfony

我正在开发一个应用程序,使用Symfony和Doctrine管理存储在许多不同表中的各种数据。我为90%的用例实现了一个简单(足够复杂)的搜索表单,但问题是最后10%,这可能是一些非常困难,复杂和扭曲的查询。

我的想法是为高级用户实现一种方法来编写一些DQL(在Doctrine中使用的SQL拨号)查询,只运行int diff = listA.size() - listB.size(); if (diff > 0) { listB.addAll(Collections.nCopies(diff, "")); } ,并使其可供其他用户使用,这样可以避免对它们进行编码并推送它们,而不是让它们动态和可扩展。查询将存储在数据库中,用户可以有机会更改查询的某些参数,使其符合他的需求。

我知道这需要一些高级安全检查,但这个解决方案是否可以接受?

非常感谢!

1 个答案:

答案 0 :(得分:1)

这已经是symfony控制台的一部分,它允许您运行DQL查询。

  1. 获取实体经理
  2. $查询= $ EM->的createQuery($ DQL)
  3. $结果集= $查询 - >执行($参数);
  4. 渲染$ resultset
  5. 要获得更完整的解决方案,请检查:vendor / doctrine / orm / lib / Doctrine / ORM / Tools / Console / Command / RunDqlCommand.php

    /**
         * {@inheritdoc}
         */
        protected function execute(InputInterface $input, OutputInterface $output)
        {
            /* @var $em \Doctrine\ORM\EntityManagerInterface */
            $em = $this->getHelper('em')->getEntityManager();
    
            [...]
    
            $query = $em->createQuery($dql);
    
            [...]
    
            $resultSet = $query->execute([...]);
    
            // Show the results
        }