2012-02-03 84 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