增加权限过滤器,并对需要的角色和权限的函数进行封装并存储到redis中,编写简单的测试代码对函数进行测试
This commit is contained in:
parent
bf034e94c8
commit
fc5967b213
|
|
@ -59,4 +59,8 @@ function _M:ttl(key)
|
||||||
return self.red:ttl(key)
|
return self.red:ttl(key)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function _M:call(key, ...)
|
||||||
|
return self.red:call(key, ...)
|
||||||
|
end
|
||||||
|
|
||||||
return _M
|
return _M
|
||||||
|
|
@ -333,6 +333,14 @@ else
|
||||||
end
|
end
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
|
local perm = require("util.permissionfilter")
|
||||||
|
|
||||||
|
local rest = perm.getRolePermissions("admin")
|
||||||
|
for _, row in pairs(rest) do
|
||||||
|
print(row.key)
|
||||||
|
end
|
||||||
|
|
||||||
|
perm.clearRolePermissions("admin")
|
||||||
|
|
||||||
--读取用户表、角色表和权限表中配置的权限数据
|
--读取用户表、角色表和权限表中配置的权限数据
|
||||||
local roleDao = require("dao.role")
|
local roleDao = require("dao.role")
|
||||||
|
|
|
||||||
79
src/util/permissionfilter.lua
Normal file
79
src/util/permissionfilter.lua
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
---
|
||||||
|
--- Generated by EmmyLua(https://github.com/EmmyLua)
|
||||||
|
--- Created by admin.
|
||||||
|
--- DateTime: 2025/11/8 11:15
|
||||||
|
--- 权限过滤器,用于验证用户是否有权限进行接口访问,通过redis进行权限获取
|
||||||
|
|
||||||
|
local red = require("share.redis")
|
||||||
|
local _M = {}
|
||||||
|
|
||||||
|
-- 为角色增加权限
|
||||||
|
function _M:addRolePerms(role_name, permissions, description)
|
||||||
|
local key = role_name.."-"..permissions
|
||||||
|
local res, err = red:get(key)
|
||||||
|
if res ~= nil then return end
|
||||||
|
--键值不存在则增加到redis中
|
||||||
|
res, err = red:set(key, "1")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 检查角色是否拥有指定权限
|
||||||
|
function _M:hasPermission(role_name, permission)
|
||||||
|
if role_name == nil or permission == nil then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 检查直接权限
|
||||||
|
local key = role_name.."-"..permission
|
||||||
|
local res, err = red:get(key)
|
||||||
|
if res ~= nil then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 检查多角色是否拥有所有指定权限
|
||||||
|
function _M:hasMultiRoleNamePermission(rolenameTable, permission)
|
||||||
|
if rolenameTable == nil or permission == nil then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 检查直接权限
|
||||||
|
for i = 1, #rolenameTable do
|
||||||
|
local role_name = rolenameTable[i]
|
||||||
|
local key = role_name.."-"..permission
|
||||||
|
local res, err = red:get(key)
|
||||||
|
if res ~= nil then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 获取角色的所有权限
|
||||||
|
function _M:getRolePermissions(role_name)
|
||||||
|
local allPermissions = {}
|
||||||
|
if role_name == nil then
|
||||||
|
return allPermissions
|
||||||
|
end
|
||||||
|
--获取redis中所有匹配的数据内容
|
||||||
|
local prefix = role_name.."-"
|
||||||
|
local cursor = "0"
|
||||||
|
local result = red:call('SCAN', cursor, 'MATCH', prefix .. '*', 'COUNT')
|
||||||
|
cursor = result[1]
|
||||||
|
for _, key in ipairs(result[2]) do
|
||||||
|
table.insert(allPermissions, key)
|
||||||
|
end
|
||||||
|
return allPermissions
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 清除角色的所有权限
|
||||||
|
function _M:clearRolePermissions(role_name)
|
||||||
|
--将redis中角色相关的键值去掉
|
||||||
|
local keys = red:call("KEYS", role_name.."-*")
|
||||||
|
if #keys > 0 then
|
||||||
|
red:call("DEL", unpack(keys))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 导出模块
|
||||||
|
return _M
|
||||||
Loading…
Reference in New Issue
Block a user