Python中验证user_roles需含admin、root且含a/b/c其一的方法
实现Python角色验证逻辑的方案
嘿,这事儿不难,咱们拆解需求后一步步来实现:
首先明确两个必须满足的验证条件:
- 基础要求:
user_roles必须同时包含admin和root - 额外要求:
user_roles必须包含a、b、c中的至少一个
代码实现思路
用Python的集合操作来做最简洁高效,集合的子集判断、交集操作天生适配这种成员检查场景:
# 给定的角色定义 roles = ('admin', 'root', ['a', 'b', 'c']) user_roles = ('admin', 'root', 'c') # 提取需要验证的基础角色和可选角色集合 required_base_roles = {'admin', 'root'} # 把roles里的列表转成集合,方便后续交集判断 optional_roles = set(roles[2]) # 验证两个核心条件 condition1 = required_base_roles.issubset(user_roles) # 检查是否同时包含admin和root condition2 = bool(set(user_roles) & optional_roles) # 检查是否有a/b/c中的任意一个 # 最终验证结果 is_valid = condition1 and condition2 print(is_valid) # 输出:True
代码细节解释
required_base_roles.issubset(user_roles):判断admin和root是否全部存在于user_roles中,只要缺一个,这个条件就不成立。bool(set(user_roles) & optional_roles):先把user_roles转成集合,和optional_roles求交集,如果交集非空(也就是有共同元素),就说明满足第二个要求,用bool()把交集结果转成布尔值。- 只有两个条件同时满足时,
is_valid才会返回True。
测试不同场景
- 如果
user_roles = ('admin', 'user', 'a'):condition1不满足(缺root),结果为False - 如果
user_roles = ('admin', 'root', 'd'):condition2不满足(没有a/b/c),结果为False - 如果
user_roles = ('admin', 'root', 'b'):两个条件都满足,结果为True
内容的提问来源于stack exchange,提问作者Tuple
相关产品推荐
相关产品推荐

