我正在编写一个基于Python cmd
模块的命令行工具(实际上是cmd2
,但它们非常相似)。此工具连接到需要身份验证的REST API;每个用户都有自己的权限级别(想想管理员和普通用户)。
在我的Python代码中,我正在创建一个与API的每个方法相对应的do_ *方法。这意味着我最终将使用do_an_admin_command
和do_regular_user_command
之类的内容,无论用户的权限级别如何,任何运行该工具的人都可以调用这些内容。
如果用户没有特权,我需要的是隐藏Python工具中可用的每个管理命令的方法。您可以假设该工具在启动时知道用于向API进行身份验证的凭据以及用户是否具有特权;管理命令也是常规命令的超集。
有什么想法吗?
答案 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 挂钩查看授权检查。