diff --git a/src/init.lua b/src/init.lua index 2a38197..1e7d5b3 100644 --- a/src/init.lua +++ b/src/init.lua @@ -79,6 +79,8 @@ local function handler() --共享数据字典进行数据存储 --dict:set("RBAC", "1") + + print("init application success") end -- 设置定时器,执行一次handler函数 diff --git a/src/share/redis.lua b/src/share/redis.lua index 52c0ed9..dbdb8e1 100644 --- a/src/share/redis.lua +++ b/src/share/redis.lua @@ -59,4 +59,8 @@ function _M:ttl(key) return self.red:ttl(key) end +function _M:scan(cursor, method, pattern) + return self.red:scan(cursor, method, pattern) +end + return _M \ No newline at end of file diff --git a/src/test/test.lua b/src/test/test.lua index 78d9771..b010f5e 100644 --- a/src/test/test.lua +++ b/src/test/test.lua @@ -336,12 +336,13 @@ end local perm = require("util.permissionfilter") local rest = perm:getRolePermissions("admin") -for _, row in pairs(rest) do - print(row.key) +for _, key in ipairs(rest) do + print(key) end perm:clearRolePermissions("admin") +--[[ --读取用户表、角色表和权限表中配置的权限数据 local roleDao = require("dao.role") --获取数据表中的记录数 @@ -358,6 +359,7 @@ for _, row in pairs(res) do --row.role_key:超级管理员 print(row.id..row.create_by..row.role_name) end +--]] --[[ --获取数据表中的记录数 diff --git a/src/util/permissionfilter.lua b/src/util/permissionfilter.lua index d2b12b6..c3e5e8f 100644 --- a/src/util/permissionfilter.lua +++ b/src/util/permissionfilter.lua @@ -58,23 +58,38 @@ function _M:getRolePermissions(role_name) --获取redis中所有匹配的数据内容 local pattern = role_name.."-*" local cursor = "0" - local result, err = red:scan(cursor, 'MATCH', pattern) - if not result then - return allPermissions - end - cursor = result[1] - for _, key in ipairs(result[2]) do - table.insert(allPermissions, key) - end + repeat + local result, err = red:scan(cursor, 'MATCH', pattern) + if not result then + return allPermissions + end + cursor = result[1] + for _, key in ipairs(result[2]) do + table.insert(allPermissions, key) + end + until cursor == "0" return allPermissions end -- 清除角色的所有权限 function _M:clearRolePermissions(role_name) --将redis中角色相关的键值去掉 - local keys = red:call("KEYS", role_name.."-*") - if keys then - red:call("DEL", unpack(keys)) + --获取redis中所有匹配的数据内容 + local pattern = role_name.."-*" + local cursor = "0" + local keys = {} + repeat + local result, err = red:scan(cursor, 'MATCH', pattern) + if not result then + break + end + cursor = result[1] + for _, key in ipairs(result[2]) do + table.insert(keys, key) + end + until cursor == "0" + for _, key in ipairs(keys) do + red:del(key) end end