You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在kwargs中检索指定键值对 Python鉴权装饰器代码排查

Python鉴权装饰器逻辑修复

问题背景

需要实现ensure_authorized装饰器,被装饰的函数被调用时,只要传入的关键字参数包含role="admin",就正常返回保密内容,否则返回无权限提示。原代码运行不符合预期,判断逻辑存在错误。

原代码的核心问题

  • 校验逻辑完全错误:{'role','admin'}是集合类型,仅存储两个独立的字符串元素,和键值对结构的kwargs字典类型不匹配,二者做相等判断永远不会成立;同时集合无法存储键值映射关系,根本没法校验role对应的参数值是不是admin。
  • 返回逻辑混乱:校验通过的分支没有调用被装饰的原函数,校验不通过的分支直接返回了装饰器内部的wrapper函数对象,运行时既拿不到保密内容,也不会给出无权限提示。

正确实现方案

校验kwargs中的目标键值对不需要复杂操作,直接通过kwargs.get("role") == "admin"即可判断:get方法会在键不存在时返回None,不会触发KeyError,写法简洁稳妥。校验通过时传入所有参数调用原函数,校验不通过时返回无权限提示即可。

修正后的完整可运行代码:

from functools import wraps

def ensure_authorized(fn):
    @wraps(fn)
    def wrapper(*args, **kwargs):
        # 校验是否传入role="admin"键值对
        if kwargs.get("role") == "admin":
            # 校验通过,执行原函数
            return fn(*args, **kwargs)
        # 校验不通过返回无权限提示
        return "Unauthorized"

@ensure_authorized
def show_secrets(*args, **kwargs):
    return "Shh! Don't tell anybody!"

# 测试
print(show_secrets(role="admin"))  # 输出: Shh! Don't tell anybody!
print(show_secrets(role="guest")) # 输出: Unauthorized
print(show_secrets())             # 输出: Unauthorized

内容的提问来源于stack exchange,提问作者Thor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:36:39