Closed shiqinfeng1 closed 1 year ago
go-zero已经帮你实现了,你只需要使用即可。 go-zero实现代码位置:https://github.com/zeromicro/go-zero/blob/master/rest/handler/authhandler.go#L72 go-zero-looklook中使用例子:https://github.com/Mikaelemmmm/go-zero-looklook/blob/main/app/usercenter/cmd/api/internal/logic/user/detailLogic.go#L31
你说的这个代码我看到了,可以在业务逻辑接口中获取userid。 但是,我的需求是做操作权限管理(菜单管理,或者rbac权限控制),在token校验通过之后,拿到userid,然后在中间件中拦截请求,根据userid判断该用户(角色)是否有该接口的访问权限。对应逻辑在项目中的SetUidToCtxMiddleware方法中实现。
就是把请求上下文给中间件就行。另外还想到一个问题:这个中间件和jwt的处理顺序是在哪里确定的呢?
https://github.com/zeromicro/go-zero/blob/master/rest/engine.go#L100
好像和这个问题没关系吧。 目前来看,在中间件中不支持获取上下文数据
找到了, 从request中可以获取上下文:
func (m *AuthInterceptorMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
uid := ctxdata.GetUserId(ctx)
logx.WithContext(ctx).Infof("get userid by AuthInterceptorMiddleware: %v", uid)
next(w, r)
}
}
在用户权限管理中,需要通过中间件对用户的权限做控制,但是项目中SetUidToCtxMiddleware方法未实现,在go-zero中也没找到中间件如何获取上下文ctx的介绍, 是当前go-zero还不支持吗?