2012-02-03 14 views
1

私はPythonのcmdモジュール(実際にはcmd2ですが、かなり似ています)に基づいてコマンドラインツールを書いています。このツールは、認証が必要なREST APIに接続します。各ユーザは自分の特権レベルを持っています(管理者と一般ユーザと考える)。Pythonのcmdモジュールでコマンドを隠す

私のPythonコードでは、APIの各メソッドに対応するdo_ *メソッドを作成しています。つまり、do_an_admin_commanddo_regular_user_commandのようなものは、彼のユーザーの特権レベルにかかわらず、ツールを実行している人が呼び出し可能になることを意味します。

私が必要とするのは、ユーザーが特権を持たない場合、Pythonツールで使用可能なすべての管理コマンドを非表示にする方法です。 APIの認証に使用する認証情報と、ユーザーが特権を持っているかどうかは、起動時に知っていると想定できます。また、管理コマンドは通常のコマンドのスーパーセットです。

アイデア?

+0

何の管理コマンドですか? REST API?あなたのツール? –

+0

問題を少し詳しく説明しました – Unknown

答えて

4

あなたの利点にサブクラス化用途:REST APIを使用して

class RegularShell(cmd.Cmd): 
    do_search(self, arg): 
     ... 
    do_retrieve(self, arg): 
     ... 

class AdminShell(RegularShell): 
    do_update(self, arg): 
     ... 

、RegularShellにAdminShellし、他の人に特権ユーザーを接続します。

もう1つの選択肢は、precmdフックを使用して承認の確認を確認することです。

+2

+1。 'AdminShell'を' RegularShell'のサブクラスにして、前者の後者のすべての機能を得ることもできます。 –

+1

クラス 'AdminShell(RegularShell)'(admin cmdsは普通のcmdsのスーパーセットなので)を行うと、サブクラス化がうまくいくでしょうが、現在のコードのレイアウトではあまり便利ではありません。 'precmd'を使用するとadminコマンドもヘルプに表示されなくなりますか?私もそれが欲しいから。 – Unknown

+0

precmdアプローチでは、ヘルプメソッドをオーバーライドして、必要な処理を行う必要があります。 –

関連する問題