yii2 rbac DbManager类缓存为什么不直接从cache获取

  1. 查看yii2的rbac源码,发现yii2在检查用户是否具有某个权限或角色是通过一个checkAccess方法来进行校验的,首先loadFromCache加载缓存到成员$this->items、$this->rules、$this->parents变量中而后通过这些变量里面的数据来判断是否有权限。
    这个不算奇怪,令我诧异的是在调用getItem方法获取某一个权限/角色时竟然也是调用$this->items来进行获取,然而在$this->getItems方法,获取全部的方法时却是查找的数据库

问题来了:

  1. 如果调用$this->items来获取auth_item表中的数据,前提条件是在调用了loadFromCache方法加载以后,并且脚本没有执行结束,$this->items才不为空,否则还是查找的数据库

  2. 既然从$this->items里面获取auth_item表中的数据,为什么DbManager类中的getItems方法却又去查找了数据库

  3. 我觉得直接从所有的查询数据直接从cache里面获取不就可以了么,如果没有,继续调用数据库操作查询,然后缓存起来不就可以了么,php不是单线程的么,将权限数据存放到变量中好像意义不大

clipboard.png

clipboard.png

clipboard.png

clipboard.png

阅读 2.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题