AuthPlatform/src/util/rbac.lua

93 lines
2.5 KiB
Lua

---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by admin.
--- DateTime: 2025/11/3 11:31
---
local RBAC = {}
RBAC.__index = RBAC
-- RBAC模型初始化
function RBAC.new()
local self = setmetatable({}, RBAC)
self.users = {} -- 用户表: {user_id = {roles = {role1, role2}}}
self.roles = {} -- 角色表: {role_name = {permissions = {perm1, perm2}}}
self.permissions = {} -- 权限表: {perm_name = {resource = "", action = ""}}
return self
end
-- 添加权限
function RBAC:add_permission(perm_name, resource, action)
self.permissions[perm_name] = {
resource = resource,
action = action
}
end
-- 添加角色并分配权限
function RBAC:add_role(role_name, permissions)
self.roles[role_name] = {
permissions = permissions or {}
}
end
-- 分配角色给用户
function RBAC:assign_role(user_id, role_name)
if not self.users[user_id] then
self.users[user_id] = {roles = {}}
end
table.insert(self.users[user_id].roles, role_name)
end
-- 检查用户权限
function RBAC:check_permission(user_id, resource, action)
local user = self.users[user_id]
if not user then return false end
for _, role_name in ipairs(user.roles) do
local role = self.roles[role_name]
if role then
for _, perm_name in ipairs(role.permissions) do
local permission = self.permissions[perm_name]
if permission and permission.resource == resource and permission.action == action then
return true
end
end
end
end
return false
end
-- 获取用户所有权限
function RBAC:get_user_permissions(user_id)
local user_permissions = {}
local user = self.users[user_id]
if not user then return user_permissions end
for _, role_name in ipairs(user.roles) do
local role = self.roles[role_name]
if role then
for _, perm_name in ipairs(role.permissions) do
table.insert(user_permissions, self.permissions[perm_name])
end
end
end
return user_permissions
end
-- 添加角色
--_, err = permit.AddPolicy(roleName, roleId, action)
-- 赋予用户角色
--_, err = permit.AddRoleForUser(user, roleName)
-- 查看具有某角色的所有用户
--res, err = permit.GetUsersForRole(roleName)
-- 移除用户具有的角色
--_, err = permit.DeleteRoleForUser(user, roleName)
-- 移除角色,跟角色相关联的用户都被移除
--_, err = permit.DeleteRole(roleName)
return RBAC