用户操作权限增加角色权限过滤,优化角色/部门关系树生成,修复验证码空参数不验证问题

This commit is contained in:
孟帅
2023-08-02 17:38:40 +08:00
parent e941e52d3e
commit 3df5236623
28 changed files with 1097 additions and 887 deletions

View File

@@ -33,9 +33,8 @@ type login struct {
}
// GetKey 读取客户端数据
func (l *login) GetKey() (key string) {
key = GetUserKey(l.UserId)
return
func (l *login) GetKey() string {
return GetUserKey(l.UserId)
}
// Client 客户端连接
@@ -77,7 +76,7 @@ func NewClient(r *ghttp.Request, socket *websocket.Conn, firstTime uint64) (clie
func (c *Client) read() {
defer func() {
if r := recover(); r != nil {
g.Log().Warningf(ctxManager, "client read err: %+v, stack:%+v, user:%+v", r, string(debug.Stack()), c.User)
g.Log().Warningf(mctx, "client read err: %+v, stack:%+v, user:%+v", r, string(debug.Stack()), c.User)
}
}()
@@ -97,7 +96,7 @@ func (c *Client) read() {
func (c *Client) write() {
defer func() {
if r := recover(); r != nil {
g.Log().Warningf(ctxManager, "client write err: %+v, stack:%+v, user:%+v", r, string(debug.Stack()), c.User)
g.Log().Warningf(mctx, "client write err: %+v, stack:%+v, user:%+v", r, string(debug.Stack()), c.User)
}
}()
defer func() {
@@ -107,12 +106,12 @@ func (c *Client) write() {
for {
select {
case <-c.closeSignal:
g.Log().Infof(ctxManager, "websocket client quit, user:%+v", c.User)
g.Log().Infof(mctx, "websocket client quit, user:%+v", c.User)
return
case message, ok := <-c.Send:
if !ok {
// 发送数据错误 关闭连接
g.Log().Warningf(ctxManager, "client write message, user:%+v", c.User)
g.Log().Warningf(mctx, "client write message, user:%+v", c.User)
return
}
_ = c.Socket.WriteJSON(message)
@@ -127,7 +126,7 @@ func (c *Client) SendMsg(msg *WResponse) {
}
defer func() {
if r := recover(); r != nil {
g.Log().Infof(ctxManager, "SendMsg err:%+v, stack:%+v", r, string(debug.Stack()))
g.Log().Infof(mctx, "SendMsg err:%+v, stack:%+v", r, string(debug.Stack()))
}
}()
c.Send <- msg

View File

@@ -205,7 +205,7 @@ func (manager *ClientManager) clearTimeoutConnections() {
func (manager *ClientManager) ping() {
defer func() {
if r := recover(); r != nil {
g.Log().Warningf(ctxManager, "websocket gcron ping recover:%+v, stack:%+v", r, string(debug.Stack()))
g.Log().Warningf(mctx, "websocket gcron ping recover:%+v, stack:%+v", r, string(debug.Stack()))
return
}
}()
@@ -220,7 +220,7 @@ func (manager *ClientManager) ping() {
// })
// 定时任务,清理超时连接
_, _ = gcron.Add(ctxManager, "*/30 * * * * *", func(ctx context.Context) {
_, _ = gcron.Add(mctx, "*/30 * * * * *", func(ctx context.Context) {
manager.clearTimeoutConnections()
})
}
@@ -229,7 +229,7 @@ func (manager *ClientManager) ping() {
func (manager *ClientManager) start() {
defer func() {
if r := recover(); r != nil {
g.Log().Warningf(ctxManager, "websocket start recover:%+v, stack:%+v", r, string(debug.Stack()))
g.Log().Warningf(mctx, "websocket start recover:%+v, stack:%+v", r, string(debug.Stack()))
return
}
}()
@@ -287,7 +287,7 @@ func (manager *ClientManager) start() {
}
}
case <-manager.closeSignal:
g.Log().Debug(ctxManager, "websocket closeSignal quit..")
g.Log().Debug(mctx, "websocket closeSignal quit..")
return
}
}

View File

@@ -6,9 +6,9 @@
package websocket
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/grpool"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gorilla/websocket"
@@ -16,18 +16,17 @@ import (
)
var (
ctxManager context.Context // 上下文
mctx = gctx.GetInitCtx() // 上下文
clientManager = NewClientManager() // 客户端管理
routers = make(map[string]EventHandler) // 消息路由
msgGo = grpool.New(20) // 消息处理协程池
)
// Start 启动
func Start(c context.Context) {
ctxManager = c
func Start() {
go clientManager.start()
go clientManager.ping()
g.Log().Debug(ctxManager, "start websocket..")
g.Log().Debug(mctx, "start websocket..")
}
// Stop 关闭

View File

@@ -16,38 +16,38 @@ import (
func handlerMsg(client *Client, message []byte) {
defer func() {
if r := recover(); r != nil {
g.Log().Warningf(ctxManager, "handlerMsg recover, err:%+v, stack:%+v", r, string(debug.Stack()))
g.Log().Warningf(mctx, "handlerMsg recover, err:%+v, stack:%+v", r, string(debug.Stack()))
}
}()
var request *WRequest
if err := gconv.Struct(message, &request); err != nil {
g.Log().Warningf(ctxManager, "handlerMsg 数据解析失败,err:%+v, message:%+v", err, string(message))
g.Log().Warningf(mctx, "handlerMsg 数据解析失败,err:%+v, message:%+v", err, string(message))
return
}
if request.Event == "" {
g.Log().Warning(ctxManager, "handlerMsg request.Event is null")
g.Log().Warning(mctx, "handlerMsg request.Event is null")
return
}
fun, ok := routers[request.Event]
if !ok {
g.Log().Warningf(ctxManager, "handlerMsg function id %v: not registered", request.Event)
g.Log().Warningf(mctx, "handlerMsg function id %v: not registered", request.Event)
return
}
err := msgGo.AddWithRecover(ctxManager,
err := msgGo.AddWithRecover(mctx,
func(ctx context.Context) {
fun(client, request)
},
func(ctx context.Context, err error) {
g.Log().Warningf(ctxManager, "handlerMsg msgGo exec err:%+v", err)
g.Log().Warningf(mctx, "handlerMsg msgGo exec err:%+v", err)
},
)
if err != nil {
g.Log().Warningf(ctxManager, "handlerMsg msgGo Add err:%+v", err)
g.Log().Warningf(mctx, "handlerMsg msgGo Add err:%+v", err)
return
}
}
@@ -56,7 +56,7 @@ func handlerMsg(client *Client, message []byte) {
func RegisterMsg(handlers EventHandlers) {
for id, f := range handlers {
if _, ok := routers[id]; ok {
g.Log().Fatalf(ctxManager, "RegisterMsg function id %v: already registered", id)
g.Log().Fatalf(mctx, "RegisterMsg function id %v: already registered", id)
return
}
routers[id] = f