oslo_policy学习小结

本文详细描述了OsloPolicy框架中的Enforcer类如何加载policy.json规则,以及authorize和enforce方法的工作原理,特别关注了规则匹配、缓存策略和异常处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0 公共方法

0.1 Enforcer.load_rules(self, force_reload = False) #从policy_file加载policy规则

判断是否force_reload,若是,将self.use_conf设为True

调CONF.find_file寻找组件对应的policy.json,找到的话将self.policy_path设为找到的文件路径

然后判断policy.json是否修改,每次load_rule前,会检查policy.json是否发生变更,通过os.path.getmtime(filename)是否变动判断是否需要重新加载policy.json,若加载,将policy.json加载到实例的self.rules中,加载完后,以policy.json完整路径为键,将文件内容为值更新入enforcer实例的cache dict。初次加载时cache为空,第二次及后续加载直接通过mtime变更判断。

cache有两个键,一个是policy.json完整路径,存文件内容,作用类似于缓存;另一个键是mtime,判断policy.json是否更新,如果更新则重新加载policy.json,并更新cache dict

1 oslo_policy.policy.Enforcer.authorize()

先判断action是否在enforcer实例的registered_rules中,若在,再执行enforce,若不在,抛PolicyNotRegistered异常

2 oslo_policy.policy.Enforcer.enforce(context, action, target)

2.1 load_rules()

2.2 从self.rules检查是否存在rule,若存在则递归检查传入的credential是否在每个role中,若任意匹配到一个则True,若credential对应的role在对应的rule中没有匹配的role则False。最后如果传入enforce的do_raise参数为True且result为False则raise异常,如果给enforce传入了异常处理函数则抛传入的指定异常,否则抛PolicyNotAuthorized异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值