隐藏Python cmd模块中的命令

发布于 2025-01-01 21:55:18 字数 409 浏览 0 评论 0原文

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

在我的 Python 代码中,我创建了一个与 API 的每个方法相对应的 do_* 方法。这意味着我最终会得到像 do_an_admin_commanddo_regular_user_command 这样的东西,任何运行该工具的人都可以调用它们,无论其用户的权限级别如何。

我需要的是一种方法来隐藏 Python 工具中可用的每个管理命令(如果用户没有特权)。您可以假设该工具在启动时知道使用哪些凭据来对 API 进行身份验证以及用户是否具有特权;此外,行政命令是常规命令的超集。

有什么想法吗?

I'm writing a command line tool based on Python's cmd module (actually, cmd2, but they're pretty similar). This tool connects to an REST API which requires authentication; each user has his own privilege level (think admin and regular user).

In my Python code I'm creating a do_* method corresponding to each method of the API. That means I'll end up with things like do_an_admin_command and do_regular_user_command which will be callable by anyone running the tool, no matter of the privilege level of his user.

What I need is a way to hide every admin command available in the Python tool, if the user is not privileged. You can assume the tool knows at start up what credentials to use to authenticate to the API and whether the user is privileged or not; also, the administrative commands are a superset of the regular ones.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜夜流光相皎洁 2025-01-08 21:55:18

使用子类化来发挥您的优势:

class RegularShell(cmd.Cmd):
    do_search(self, arg):
        ...
    do_retrieve(self, arg):
        ...

class AdminShell(RegularShell):
    do_update(self, arg):
        ...

使用 REST API,将特权用户连接到 AdminShell,将其他用户连接到 RegularShell。

另一种可供考虑的替代方案是使用 precmd 挂钩来查看授权检查。

Use subclassing to your advantage:

class RegularShell(cmd.Cmd):
    do_search(self, arg):
        ...
    do_retrieve(self, arg):
        ...

class AdminShell(RegularShell):
    do_update(self, arg):
        ...

With the REST API, connect privileged users to the AdminShell and others to the RegularShell.

Another alternative to consider is using the precmd hook to see check for authorization.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文