2016-06-24 13 views
0

コンソールコマンドを使用するSymfonyアプリケーションをビルドしています。同じコンソールコマンドはコントローラからのイベントで実行できますが、端末からも実行できます。コマンドがどこから実行されたのかを知るにはどうすればいいのでしょうか。コマンドがコントローラから実行された場合、ユーザーはすでに実行権限を持っています。しかし、ターミナルから実行されている場合、彼は必要な役割を持っているかどうかを確認するためにユーザー名とパスワードで認証する必要がありますか?Symfony - コンソールコマンドがコントローラから実行されたのか、ターミナルから実行されたのかを知る方法?

+0

は、あなただけのチェックではないでしょうか? –

+4

コンソールコマンドはウェブから実行されるものではありません。ところで、誰かが端末にアクセスした場合、すべてのファイルへのアクセス権があるため、アクセスチェックは役に立たない可能性があります。 – tkausl

+0

私はpheanstalkでコマンドを実行し、データをinfuxDBに更新します。しかし、私は、アップデートが正しく実行されなかったり何かがうまくいかなかった場合、端末によってコマンドを実行するオプションを追加したい。しかし、彼は認証する必要があり、私は役割を確認する必要があります。 IPによるアクセスを制限する追加のセキュリティがサーバー上に存在するため、問題はありません。しかし、内部のIPからのアクセス権を持つ多くの雇用者がいるので、彼が何をしているのかわからない人がコマンドを実行しているのが好きではないでしょう。 – sanof

答えて

0

symfonyコンソールアプリケーションには、HttpKernelのようなファイアウォールレイヤーがありません。

コンソールコンポーネントは、個々のユーザーに面しているsthではなく、小さな「管理者のような」タスク向けに構築されています。

すべての問題は、コマンドバスパターンを実装することで解決できます。

"コマンド"はセキュリティ保護されていてユーザがあり、セキュリティチェックなしでCLIコマンド(crontab用)で作成されます。

その後、コマンドハンドラに処理するコマンドバスに渡されます。

ハンドラには、executeメソッドの現在のロジックが含まれています。コマンドオブジェクトには、これらのロジックを実行するためのデータがすべて含まれます。==現在の入力引数とオプション。

その後のSymfonyコマンドは、入力引数をコマンドハンドラに渡すような非常にスリムです。それがそうであるように。

長時間実行されるタスクの場合、Web要求からワーカー・キューにオフロードすることさえできます。

名前の衝突に気を付けてください。 symfonyコンソールコマンド!==ここではコマンドバスコマンドです。

たとえば、あなたはsymfonyの内部でSimpleBusを使用することができます。また https://github.com/SimpleBus

@skoopによって命名問題に関する最近のブログ記事: http://leftontheweb.com/blog/2016/06/18/Command-or-Controller/

6

あなたのコマンドは、コンソールから実行されたかどうかをチェックすることができますユーザーがログインしている場合やphp_sapi_name() function or PHP_SAPI constant使用してコントローラから(php_sapi_nameに似ている())

if ('cli' === PHP_SAPI) { 
    // command was run from the console 
} else { 
    // command was run from a controller 
}