本文主要是介绍oslo_policy学习小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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异常
这篇关于oslo_policy学习小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!