Open youngwang12138 opened 2 years ago
https://zhongyang.wang/post/1658727731/
前言 做权限验证时,需要对传入的路由与配置的路由进行匹配,判断是否对API有权限。这里比较通过字典树和正则匹配这两种实现方式的性能差异 权限信息 里面主要包含roleId、url、method 1 2 3 4 5 6 7 8 9 10 11 { "role_id": 5, "role_name": "超级管理员", "apis": [ { "name": "a", "url": "github.com/go-redis/:str/redis/v8", "method": "GET" } ] } 字典树的实现方式 1 2 3 4 5 6 // 获取一个对象 roleTrieTest = NewRoleTrie() // 根据权限信息生成树 roleTrieTest.Generate(roleInfo) // 查找,符合条件返回true roleTrieTest.Search(roleId, url, urlMethod) 正则匹配的实现方式 1 2 3 4 5 6 // 获取一个对象 roleTrieTest = NewRoleTrie() // 根据权限信息生成role拥有的URL正则表达式列表 roleTrieTest.Generate(roleInfo) // 查找,符合条件返回true roleTrieTest.Search(roleId, url, urlMethod) Bench 测试代码如下 测试只针对查找过程,不包含生成查找信息。
https://zhongyang.wang/post/1658727731/
前言 做权限验证时,需要对传入的路由与配置的路由进行匹配,判断是否对API有权限。这里比较通过字典树和正则匹配这两种实现方式的性能差异 权限信息 里面主要包含roleId、url、method 1 2 3 4 5 6 7 8 9 10 11 { "role_id": 5, "role_name": "超级管理员", "apis": [ { "name": "a", "url": "github.com/go-redis/:str/redis/v8", "method": "GET" } ] } 字典树的实现方式 1 2 3 4 5 6 // 获取一个对象 roleTrieTest = NewRoleTrie() // 根据权限信息生成树 roleTrieTest.Generate(roleInfo) // 查找,符合条件返回true roleTrieTest.Search(roleId, url, urlMethod) 正则匹配的实现方式 1 2 3 4 5 6 // 获取一个对象 roleTrieTest = NewRoleTrie() // 根据权限信息生成role拥有的URL正则表达式列表 roleTrieTest.Generate(roleInfo) // 查找,符合条件返回true roleTrieTest.Search(roleId, url, urlMethod) Bench 测试代码如下 测试只针对查找过程,不包含生成查找信息。