隐藏Python cmd模块中的命令
我正在写一个基于Python的命令行工具,使用的是cmd
模块(其实是cmd2
,但它们很相似)。这个工具需要连接到一个REST API,而这个API需要用户认证;每个用户都有自己的权限等级(可以想象成管理员和普通用户)。
在我的Python代码中,我为API的每个方法创建一个以do_开头的方法。这意味着我会有像do_an_admin_command
和do_regular_user_command
这样的函数,任何运行这个工具的人都可以调用这些函数,不管他们的用户权限是什么。
我需要的是一种方法,如果用户没有管理员权限,就隐藏所有在Python工具中可用的管理员命令。你可以假设这个工具在启动时就知道用什么凭证来认证API,以及用户是否有权限;另外,管理员命令是普通命令的一个超集。
有什么好主意吗?
1 个回答
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这个钩子来检查用户是否有权限。