【问题标题】:Restrict service to specific host限制对特定主机的服务
【发布时间】:2015-07-16 08:28:02
【问题描述】:

我今天来找你是因为我的 Symfony 项目遇到了问题。我想将服务限制为特定主机。该项目包括用于不同类型用户的多个界面。问题是我只需要为特定主机声明一些服务,以免干扰其他接口。

我尝试在服务定义中添加 host 子句,但 Symfony 不接受它。临时的解决方案是检查服务内部的主机,但它不干净..

感谢所有提供帮助的人!

咻!

【问题讨论】:

    标签: symfony service host


    【解决方案1】:

    我会坚持使用服务内的支票;当然你应该使用配置参数而不是硬编码主机,这样你就可以在不编辑服务的情况下更改主机或禁用检查。

    编辑:完整示例

    class MyService
    {
        public function __construct($container, $request)
        {
            $this->container = $container;
            $this->request = $request;
        }
    
        public function doSomething()
        {
            if ( ! $this->checkHostRestrictions()) {
                return;
            }
    
            // ... do something
    
        }
    
        private function checkHostRestrictions() 
        {
            $allowedHost = $this->container->getParameter('myServiceAllowedHost', '');
            if (empty($allowedHost)) {
                // here I assume that if I don't set an allowed host, all are allowed
                // you can easily change the logic
                return true; 
            }
    
            $clientIp = $this->request->getClientIp();
            if ($clientIp == $allowedHost) {
                return true;
            }
    
            return false;
        }
    }
    

    附:当然你也可以传递单个参数而不是完整的容器,但我觉得这不是问题的真正主题。

    【讨论】:

    • 除非我完全误解了你的问题,否则 Symfony 可以让你做的很好。我相应地编辑了我的答案。
    • 到目前为止我就是这样做的。我只是认为这种方式很烦人,因为您需要实现与该服务无关的逻辑。抱歉,如果我解释得不好。
    • 哦,我明白了。但在这种情况下,检查的正确位置是控制器,而不是服务定义,所以即使 Symfony 允许你这样做,它也是“不干净的”(恕我直言)。
    • 好吧...如果服务是 symfony 事件,我无法在控制器中进行检查。到目前为止,我坚持服务..
    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2014-07-27
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多