easy-swoole / easyswoole

swoole,easyswoole,swoole framework
https://www.easyswoole.com/
Apache License 2.0
4.73k stars 512 forks source link

easyswoole/policy 路径验证BUG #544

Open sakiyo opened 2 years ago

sakiyo commented 2 years ago

当路径中连续两个item为相同字符串时会出现验证错误 eg: 当我们调用 $policy->check($path) 如果$path传入的是类似这样 /Api/Admin/Merchant/Merchant/getMerchantList 因为有连续两个 Merchant 则会获取不到最后一个 getMerchantList

在class EasySwoole\Policy\PolicyNode 中的 search() 方法 调试可以看到 大约123行至125行中 是因为这个判断提前返回了 if($name == $this->name){ return $this; }

如果两个名字相同则返回,并不会继续向下判断。

经测试改成如下判断可以解决: if($name == $this->name && !isset($this->leaves[$name]) && !isset($this->leaves['*'])){ return $this; }

如需讨论可在issue回复。

XueSiLf commented 2 years ago

好的,感谢反馈,晚点我们处理下。