在Python中隐藏命令';s cmd模块
我正在基于Python的在Python中隐藏命令';s cmd模块,python,cmd,Python,Cmd,我正在基于Python的cmd模块编写一个命令行工具(实际上,cmd2,但它们非常相似)。此工具连接到需要身份验证的REST API;每个用户都有自己的权限级别(想想管理员和普通用户) 在我的Python代码中,我创建了一个与API的每个方法相对应的do_*方法。这意味着我最终会得到像do_an_admin_command和do_regular_user_command这样的东西,运行该工具的任何人都可以调用这些命令,无论其用户的权限级别如何 如果用户没有特权,我需要一种隐藏Python工具中可
cmd
模块编写一个命令行工具(实际上,cmd2
,但它们非常相似)。此工具连接到需要身份验证的REST API;每个用户都有自己的权限级别(想想管理员和普通用户)
在我的Python代码中,我创建了一个与API的每个方法相对应的do_*方法。这意味着我最终会得到像do_an_admin_command
和do_regular_user_command
这样的东西,运行该工具的任何人都可以调用这些命令,无论其用户的权限级别如何
如果用户没有特权,我需要一种隐藏Python工具中可用的所有管理命令的方法。您可以假设该工具在启动时知道使用什么凭据对API进行身份验证,以及用户是否具有特权;此外,管理命令是常规命令的超集
有什么想法吗?利用子类化为您带来好处:
class RegularShell(cmd.Cmd):
do_search(self, arg):
...
do_retrieve(self, arg):
...
class AdminShell(RegularShell):
do_update(self, arg):
...
使用RESTAPI,将特权用户连接到AdminShell,将其他用户连接到RegularShell
另一个可供选择的方案是使用PRIMD钩子来查看权限。
使用子类为您的优势:
class RegularShell(cmd.Cmd):
do_search(self, arg):
...
do_retrieve(self, arg):
...
class AdminShell(RegularShell):
do_update(self, arg):
...
使用RESTAPI,将特权用户连接到AdminShell,将其他用户连接到RegularShell
另一个可供选择的方案是使用PRIMD钩子来查看权限。< /P>管理员命令什么?RESTAPI?你的工具?解释了问题好一点管理员的命令是什么?RESTAPI?你的工具?更好地解释了问题+1。还可以将
AdminShell
作为RegularShell
的子类,以获得后者在前者中的所有功能。如果我执行类似于classAdminShell(RegularShell)
(因为admin cmd是常规cmd的超集)的操作,子类化将对我有效,但考虑到我当前代码的布局,这不是很方便。使用precmd
是否允许我阻止管理员命令也显示在帮助中?因为我也希望如此。使用precmd方法,您也应该重写help方法来做您想做的事情。好吧,它似乎可以工作,但它也需要重写do_help之类的东西。太糟糕了,像这样的功能不是现成的。还可以将AdminShell
作为RegularShell
的子类,以获得后者在前者中的所有功能。如果我执行类似于classAdminShell(RegularShell)
(因为admin cmd是常规cmd的超集)的操作,子类化将对我有效,但考虑到我当前代码的布局,这不是很方便。使用precmd
是否允许我阻止管理员命令也显示在帮助中?因为我也希望如此。使用precmd方法,您也应该重写help方法来做您想做的事情。好吧,它似乎可以工作,但它也需要重写do_help之类的东西。太糟糕了,像这样的功能没有现成的。