【问题标题】:Give permission for bjyauthorize to run mvc application of ZF2 from CLI授予 bjyauthorize 从 CLI 运行 ZF2 的 mvc 应用程序的权限
【发布时间】:2014-01-08 08:30:14
【问题描述】:

我在 ZF2 上有一个完全运行的 mvc 应用程序。我想从命令行运行一些操作。我已经正确设置了我的控制台路由和其他环境。当我从 CLI 运行我的应用程序时,我得到了这样的 Permission denied 异常:

'You are not authorized to access GeneratePdf\Controller\GeneratePdf\GeneratePdf:generate-all' in /var/www/zf2-reporting/module/BjyAuthorize/src/BjyAuthorize/Guard/Controller.php‌​:172

我的数据库中已经有一些用户。如何使用这些凭据授权 CLI 用户运行操作?

编辑

以下是 bjyauthorize.global.php 中提到的控制器的警卫数组。

'guards' => array(
'BjyAuthorize\Guard\Controller' => array(array('controller' => 'GeneratePdf\Controller\GeneratePdf', 'roles' => array('admin', 'letters_admin'))

我也使用过 ZfcUser。如何从 CLI 传递用户登录凭据。或者,如果有任何方法可以从 cli 使用用户会话。

谢谢

【问题讨论】:

  • 你能告诉我们你的警卫设置吗?您似乎没有将控制器添加到“BjyAuthorize\Guard\Controller”。
  • 它已经在像这样的保护数组中: 'guards' => array( /* 如果这里指定了这个保护(即它被启用),它将阻止 * 访问所有控制器和操作,除非它们在此处指定。 * 您可以省略 'action' 索引以允许访问整个控制器 */ 'BjyAuthorize\Guard\Controller' => array(array('controller' => 'GeneratePdf\Controller\GeneratePdf', ' roles' => array('admin', 'letters_admin')) 如何在应用程序中传递用户会话(我的应用程序也使用 ZfcUser)?
  • 我很确定您的 cli 没有管理员角色,这就是拒绝访问的原因。尝试验证控制台,然后访问控制器。
  • 我没有做任何事情来“验证控制台”。我只是像这样简单地运行cli:php public/index.php generate all, how to do authentication the console?
  • 在您的控制台控制器中,您必须使用 github.com/ZF-Commons/ZfcUser/blob/master/src/ZfcUser/… 服务并验证您的 cli。出于安全考虑,这样做应该没问题,因为控制台路由只能通过控制台运行。或者,您可以创建一个控制台角色并将其添加到您的警卫中,但您仍然需要对控制台进行身份验证。

标签: php zend-framework2 command-line-interface zfcuser bjyauthorize


【解决方案1】:

我找到了解决方案。我无法为 cli 用户授予权限,但它是通过在从 CLI 运行时禁用 bjyAuthorize 来完成的。

我找到了解决方案:How to use BjyAuthorize in ZF2 CLI application?

如果其他人发现此问题,以下是他们的解释:

要在从 cli 运行时禁用 bjyAuthorize,我们可以在 application.config.php 中执行以下操作。

最初不要在 application.config.php 数组中添加“BjyAuthorize”和“BjyProfiler”。检查控制台,如果不是控制台访问,则将它们添加到 $config 数组中。

if (!Console::isConsole()) {
    array_unshift($config['modules'], 'BjyAuthorize');
    array_unshift($config['modules'], 'BjyProfiler');
}
return $config;

还需要在 Application/Module.php 的 onBootstrap 方法中检查 Console,如下所示

if (!Console::isConsole()) {
        $authorize = $sm->get('BjyAuthorize\Service\Authorize');
        $acl = $authorize->getAcl();
        $role = $authorize->getIdentity();
    }

最后但同样重要的是,不要忘记导入 Console 类:

use Zend\Console\Console;

【讨论】:

    猜你喜欢
    • 2022-10-08
    • 2012-04-29
    • 2021-04-13
    • 2017-01-06
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多