Python SDK 需要 Python 3.10 或更高版本,唯一的运行时依赖是 httpx。它提供同步的 Client 和 asyncio 的 AsyncClient,两者参数相同。软件包:PyPI 上的 speedle 0.1.0。参考文档:speedle-sdk/python。
示例检查的策略见 SDK。
添加依赖
使用 pip,在虚拟环境中安装:
python3 -m venv .venv
. .venv/bin/activate
pip install speedle==0.1.0或者使用 uv,在 uv 项目中添加:
uv add speedle==0.1.0调用本地 Speedle
按 SDK 一节启动 Speedle 并创建示例策略。将以下程序保存为 main.py:
import sys
from speedle import Auth, Client, SpeedleError
try:
with Client(
backend="speedle-plus",
endpoint="http://localhost:6734",
auth=Auth.none(),
service_name="docs",
) as speedle:
allowed = speedle.is_allowed("alice", "get", "/docs/public")
print(f"alice get /docs/public: allowed={allowed}")
decision = speedle.check("alice", "delete", "/docs/public")
print(f"alice delete /docs/public: allowed={decision.allowed} reason={decision.reason!r}")
except SpeedleError as e:
print(f"Speedle error: {e}", file=sys.stderr)
sys.exit(1)在虚拟环境中用 python main.py 运行,或者使用 uv:
uv run main.py输出:
alice get /docs/public: allowed=True
alice delete /docs/public: allowed=False reason=<Reason.NO_APPLICABLE_POLICIES: 3>调用 Speedle Cloud
Speedle Cloud 即将上线。
程序从 SPEEDLE_SERVICE 读取服务名,从 SPEEDLE_TOKEN 读取该服务的令牌。SPEEDLE_ENDPOINT 可覆盖默认端点 https://cloud.speedle.io。将 main.py 替换为:
import os
import sys
from speedle import Auth, Client, SpeedleError
try:
with Client(
backend="speedle-cloud",
endpoint=os.environ.get("SPEEDLE_ENDPOINT", "https://cloud.speedle.io"),
auth=Auth.bearer(os.environ["SPEEDLE_TOKEN"]),
service_name=os.environ["SPEEDLE_SERVICE"],
) as speedle:
allowed = speedle.is_allowed("alice", "get", "/docs/public")
print(f"alice get /docs/public: allowed={allowed}")
decision = speedle.check("alice", "delete", "/docs/public")
print(f"alice delete /docs/public: allowed={decision.allowed} reason={decision.reason!r}")
except SpeedleError as e:
print(f"Speedle error: {e}", file=sys.stderr)
sys.exit(1)设置环境变量后运行。read -rs 不会把令牌写入 shell 历史,也不会显示在屏幕上:
export SPEEDLE_SERVICE=docs
read -rs SPEEDLE_TOKEN && export SPEEDLE_TOKEN
python main.py服务中已有示例策略时,输出为:
alice get /docs/public: allowed=True
alice delete /docs/public: allowed=False reason=<Reason.NO_APPLICABLE_POLICIES: 3>令牌是服务端密钥,切勿放进浏览器、移动应用或桌面客户端。