diff --git a/src/dao/auth.lua b/src/dao/auth.lua index 9cec4d7..1ad1a08 100644 --- a/src/dao/auth.lua +++ b/src/dao/auth.lua @@ -3,10 +3,7 @@ --- Created by frankly. --- DateTime: 2025/10/29 23:36 --- ---引用使用的库文件 -local model = require("share.model") ---创建一个数据表相关的模型 -local userModel = model:new('sys_user') +local userDao = require("dao.user") local _M = {} @@ -20,24 +17,7 @@ local function authenticate(name, passwd) if passwd == "" then return 0x010002, nil end - local pwdMd5 = ngx.md5(passwd) - --根据用户进行验证用户是否存在 - local code, res = userModel:where("username", "=", name):where("password", "=", pwdMd5):get() - if code == 0 and res ~= nil then - return code, res - end - --根据手机号进行验证用户是否存在 - code, res = userModel:where("phone", "=", name):where("password", "=", pwdMd5):get() - if code == 0 and res ~= nil then - return code, res - end - --根据邮箱进行验证用户是否存在 - code, res = userModel:where("email", "=", name):where("password", "=", pwdMd5):get() - if code == 0 and res ~= nil then - return code, res - end - --查询不到用户信息 - return 0x010003, nil + return userDao:adjustUser(name, passwd) end --用户登录业务逻辑处理 @@ -60,6 +40,14 @@ function _M.login(jsonData) if num <= 0 then return 0x01000C,nil end + local userid = res[1].id + --获取用户id查询角色信息 + local err, rest = userDao:userRole(userid) + if rest == nil then + return 0x01000C,nil + end + res[1].role_id = rest[1].role_id + res[1].role_name = rest[1].role_name return 0, res end @@ -72,11 +60,11 @@ end --用户注册业务逻辑处理 function _M.signup(jsonData) - return userModel:addSystemUser(jsonData) + return userDao:addSystemUser(jsonData) end function _M.getUser(userid) - return userModel:find(userid) + return userDao:getSystemUser(userid) end return _M \ No newline at end of file diff --git a/src/dao/user.lua b/src/dao/user.lua index 92322cb..f1ea6b8 100644 --- a/src/dao/user.lua +++ b/src/dao/user.lua @@ -10,6 +10,8 @@ local model = require("share.model") --创建一个数据表相关的模型 local userModel = model:new('sys_user') +local roles = require("dao.role") + local _M = {} local user = { @@ -101,4 +103,38 @@ function _M:updateSystemUser(id, jsonData) return userModel:where('id', '=', id):update(jsonData) end +--通过用户名和密码验证用户是否存在 +function _M:adjustUser(name, passwd) + if name == nil or passwd == nil then + return 0x010003, nil + end + local pwdMd5 = ngx.md5(passwd) + --根据用户进行验证用户是否存在 + local code, res = userModel:where("username", "=", name):where("password", "=", pwdMd5):get() + if code == 0 and res ~= nil then + return code, res + end + --根据手机号进行验证用户是否存在 + code, res = userModel:where("phone", "=", name):where("password", "=", pwdMd5):get() + if code == 0 and res ~= nil then + return code, res + end + --根据邮箱进行验证用户是否存在 + code, res = userModel:where("email", "=", name):where("password", "=", pwdMd5):get() + if code == 0 and res ~= nil then + return code, res + end + --查询不到用户信息 + return 0x010003, nil +end + +--通过用户id获取角色的角色id和角色名称 +function _M:userRole(id) + local sql = [[SELECT "a"."id","a".username,b."id" AS role_id,b.role_name FROM + sys_user AS "a" INNER JOIN sys_user_role AS "c" ON "a"."id" = "c".user_id + INNER JOIN sys_role AS b ON "c".role_id = b."id" WHERE + "a"."id" = ']]..id.."'" + return userModel:exec(sql) +end + return _M \ No newline at end of file diff --git a/src/service/auth/auth.lua b/src/service/auth/auth.lua index 0e712a5..93f74b5 100644 --- a/src/service/auth/auth.lua +++ b/src/service/auth/auth.lua @@ -2,7 +2,7 @@ --- Generated by EmmyLua(https://github.com/EmmyLua) --- Created by admin. --- DateTime: 2025/10/28 11:09 ---- +--- 用于 local resp = require("util.response") local authDao = require("dao.auth") local validator = require("validator.auth.auth") @@ -36,15 +36,12 @@ function _M.login() resp:send(result) return end - local id = "" - local username = "" - for _, row in ipairs(ret) do - id = row.id - username = row.username - end - + local id = ret[1].id + local username = ret[1].username + local role_id = ret[1].role_id + local role_name = ret[1].role_name --获取的登陆的用户信息,返回tocken - local jwt_token = token.generateToken(id, username) + local jwt_token = token.generateToken(id, username, role_id, role_name) local data = {} data["token"] = jwt_token data["userInfo"] = ret @@ -95,8 +92,9 @@ function _M.logout() --验证成功记录登出的日志信息 local userid = ret["body"]["payload"]["userid"] local username = ret["body"]["payload"]["username"] - local rolename = ret["body"]["payload"]["username"] - ngx.log(ngx.INFO, "userid:"..userid.." username:"..username.." rolename:"..rolename.." logout system") + local role_id = ret["body"]["payload"]["role_id"] + local role_name = ret["body"]["payload"]["role_name"] + ngx.log(ngx.INFO, "userid:"..userid.." username:"..username.." role_id:"..role_id.." role_name:"..role_name.." logout system") local result = resp:json(0, "用户退出系统成功") resp:send(result) end @@ -143,6 +141,9 @@ function _M.permission() end --验证成功获取用户id信息 local userid = retToken["body"]["payload"]["userid"] + local username = retToken["body"]["payload"]["username"] + local role_id = retToken["body"]["payload"]["role_id"] + local role_name = retToken["body"]["payload"]["role_name"] --通过用户id查询到用户的权限信息 local code, ret = authDao.getUser(userid) --读取数据错误 diff --git a/src/service/system/user.lua b/src/service/system/user.lua index 3364a9f..70ccc07 100644 --- a/src/service/system/user.lua +++ b/src/service/system/user.lua @@ -36,7 +36,7 @@ function _M.getSystemUsers(m) local path = m._path ngx.log(ngx.INFO, "path:"..path.." method:"..method) --判断当前接口用户和角色是否有权限 - + --获取页码和请求的数据量 --local args = ngx.req.get_uri_args() local pageNum = ngx.var.pagenum or 1 diff --git a/src/share/model.lua b/src/share/model.lua index 0c88312..0e7324d 100644 --- a/src/share/model.lua +++ b/src/share/model.lua @@ -64,6 +64,7 @@ function _M:retrieve_relations(ids) return {} end local ids_str = implode(unique(ids)) + print(ids_str) self.relation_sql = 'select * from \"'..self.relation.model.table..'\" where ' .. self.relation.foreign_key .. ' in (' .. ids_str .. ')' return table_remove(self:query(self.relation_sql, READ), self.relation.model:get_hidden()) end @@ -395,6 +396,10 @@ function _M:debug() ngx.log(ngx.INFO, self.table.." ") end +function _M:exec(sql) + return self:query(sql, READ) +end + --初始化数据表中的字段 function _M:new(table, attributes, hidden) local obj = { diff --git a/src/test/test.lua b/src/test/test.lua index 041fb18..1cbccff 100644 --- a/src/test/test.lua +++ b/src/test/test.lua @@ -102,6 +102,10 @@ ngx.say(addlib.add(5,7)) --end --[[ +-- 方法1:直接使用EXISTS命令 +local value = redis.call("EXISTS", "admin-system:user:add") +ngx.say("key value exist:"..value) + local val1, err = redis:get("admin-system:user:add") local val2, err = redis:get("admin-system:user:edit") local val3, err = redis:get("admin-system:user:delete") @@ -329,12 +333,18 @@ else end --]] ---引用使用的库文件 -local Model = require("share.model") ---创建一个数据表相关的模型 -local userModel = Model:new('sys_user') -local user_and_role = userModel:where('id', '=', "1"):with('sys_role'):get() +local userModel = require("dao.user") +local code, res = userModel:userRole("1") +--显示查询到的数据记录 +if res ~= nil then + print("id value: -- ", res[1].id) + for _, row in ipairs(res) do + for key, value in pairs(row) do + ngx.say(key .. ":" .. tostring(value)) + end + end +end --[[ --获取数据表中的记录数 diff --git a/src/util/token.lua b/src/util/token.lua index e96c8f2..4a3b439 100644 --- a/src/util/token.lua +++ b/src/util/token.lua @@ -23,21 +23,24 @@ local obj = { payload = { -- 自定义数据 userid = "", -- 用户id username = "", -- 用户名 - role = "", -- 角色 + role_id = "", -- 角色id + role_name = "", -- 角色名称 --iss = "your_issuer", -- 签发者 --sub = "1234567890", -- 主题 - exp = ngx.time() + 3600, -- 过期时间(例如:当前时间+1小时) - iat = ngx.time() -- 签发时间 + exp = ngx.time() + 3600, -- 过期时间(例如:当前时间+1小时) + iat = ngx.time() -- 签发时间 } } -function _M.generateToken(userid, username) - if userid == nil or username == nil then +function _M.generateToken(userid, username, role_id, role_name) + if userid == nil or username == nil or role_id == nil or role_name == nil then return "" end obj.payload.userid = userid obj.payload.username = username + obj.payload.role_id = role_id + obj.payload.role_name = role_name --获取的登陆的用户信息,返回tocken local jwt_token = jwt:sign(SYSTEM_CONFIG.secret_key, obj) return "Bearer "..jwt_token