2012-02-03 45 views
1

我正在編寫一個基於Python的cmd模塊(實際上,cmd2,但它們非常相似)的命令行工具。該工具連接到需要認證的REST API;每個用戶都有自己的權限級別(認爲管理員和普通用戶)。在Python的cmd模塊中隱藏命令

在我的Python代碼中,我創建了一個對應於API的每個方法的do_ *方法。這意味着我最終會得到諸如do_an_admin_commanddo_regular_user_command之類的東西,無論用戶的特權級別如何,都可以由運行該工具的任何人調用。

我需要的是一種隱藏Python工具中可用的每個管理命令的方法,如果用戶沒有特權。您可以假定該工具在啓動時知道使用什麼憑證對API進行身份驗證,以及該用戶是否擁有權限;另外,管理命令是常規命令的超集。

任何想法?

+0

管理命令是什麼? REST API?你的工具? – 2012-02-03 10:29:41

+0

解釋一下問題 – Unknown 2012-02-03 10:39:16

回答

4

使用的子類,你的優勢:

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

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

隨着REST API,特權用戶的AdminShell和其他連接到RegularShell。

另一種可供選擇的方法是使用precmd掛鉤查看授權檢查。

+2

+1。也可以使'AdminShell'成爲'RegularShell'的子類,以獲得前者的所有功能。 – 2012-02-03 10:40:38

+1

如果我做類'AdminShell(RegularShell)'(因爲admin cmds是常規cmds的超集)之類的東西,子類化將適用於我,但考慮到當前代碼的佈局,這不是很方便。使用'precmd'是否允許我阻止管理命令顯示在幫助中?因爲我也喜歡。 – Unknown 2012-02-03 10:42:36

+0

使用precmd方法,您還應該重寫幫助方法以執行所需操作。 – 2012-02-03 10:50:01