隐藏Python cmd模块中的命令

时间:2012-02-03 10:27:39

标签: python cmd

我正在编写一个基于Python cmd模块的命令行工具(实际上是cmd2,但它们非常相似)。此工具连接到需要身份验证的REST API;每个用户都有自己的权限级别(想想管理员和普通用户)。

在我的Python代码中,我正在创建一个与API的每个方法相对应的do_ *方法。这意味着我最终将使用do_an_admin_commanddo_regular_user_command之类的内容,无论用户的权限级别如何,任何运行该工具的人都可以调用这些内容。

如果用户没有特权,我需要的是隐藏Python工具中可用的每个管理命令的方法。您可以假设该工具在启动时知道用于向API进行身份验证的凭据以及用户是否具有特权;管理命令也是常规命令的超集。

有什么想法吗?

1 个答案:

答案 0 :(得分: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 挂钩查看授权检查。