1 回答
TA贡献1875条经验 获得超3个赞
问题是您将用户存储在一个上下文中,但随后您尝试从另一个上下文中检索用户。value*gin.Context和 value*gin.Context.Request.Context是两个独立的上下文值。
您正在使用请求的上下文来存储用户:
c.Request.WithContext(context.WithValue(c.Request.Context(), key, value))
然后您使用 gin 上下文来检索用户:
func getCurrentUser(ctx context.Context) *dbm.User {
cu := ctx.Value(utils.ProjectContextKeys.UserCtxKey).(*dbm.User)
// ...
func Get(orm *orm.ORM) gin.HandlerFunc {
return func(ctx *gin.Context) {
cu := getCurrentUser(ctx) // here you're passing *gin.Context to the function.
// ...
因此,要解决这个问题,将传递给getCurrentUser调用的值更改为:
func Get(orm *orm.ORM) gin.HandlerFunc {
return func(ctx *gin.Context) {
cu := getCurrentUser(ctx.Request.Context())
if ok, err := cu.HasPermission(consts.Permissions.Create, consts.EntityNames.Users); !ok || err != nil {
ctx.String(http.StatusUnauthorized, "BAD")
}
}
}
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报