Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
Expand Down
2 changes: 1 addition & 1 deletion internal/conf/conf.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion internal/server/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,12 @@ func Auth() middleware.Middleware {
if claims, err := jwt.VerifyToken(token); err == nil {
ctx = context.WithValue(ctx, "user_id", claims.UserID)
ctx = context.WithValue(ctx, "role_id", claims.RoleID)
} else {
return "token is invalid", err
}

} else {
// 如果token为空则设置角色id为uint8(1),表示未登录访客
ctx = context.WithValue(ctx, "role_id", uint8(1))
}
}
return handler(ctx, req)
Expand Down
1 change: 1 addition & 0 deletions internal/server/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ func NewHTTPServer(c *conf.Server, g *conf.Gin, d *conf.Data, greeter *service.K
Auth(),
logging.Server(logger),
validate.Validator(),
Privilege(),
),
}

Expand Down
129 changes: 129 additions & 0 deletions internal/server/privilege.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
package server

import (
"context"
"errors"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/transport"
pb "kubecit-service/api/helloworld/v1"

"github.com/go-kratos/kratos/v2/middleware"
)

type UserRole string

func Privilege() middleware.Middleware {
return func(handler middleware.Handler) middleware.Handler {
return func(ctx context.Context, req interface{}) (reply interface{}, err error) {
if tmp := ctx.Value("role_id"); tmp != nil {
roleID := int(tmp.(uint8))
log.Debugf("current role_id: %v\n", roleID)
if tr, ok := transport.FromServerContext(ctx); ok {
if _, exist := RolePrivileges[roleID][tr.Operation()]; exist {
return handler(ctx, req)
}
}
}
return "not enough privileges", errors.New("not enough privileges")
}
}
}

var RolePrivileges map[int]map[string]struct{}

func init() {
RolePrivileges = make(map[int]map[string]struct{})
// Role Guest
RolePrivileges[1] = map[string]struct{}{
pb.OperationKubecitSystemSettings: {},
pb.OperationKubecitSearchCourse: {},
pb.OperationKubecitRegisterUsername: {},
pb.OperationKubecitMostNew: {},
pb.OperationKubecitLoginByJson: {},
pb.OperationKubecitGetSlider: {},
pb.OperationKubecitGetTeacher: {},
pb.OperationKubecitListAllTeacher: {},
pb.OperationKubecitListSlidersByPriority: {},
pb.OperationKubecitListCategory: {},
pb.OperationKubecitListCategoryV2: {},
pb.OperationKubecitListLessons: {},
pb.OperationKubecitGetCourse: {},
}
// Role RegisterUser
RolePrivileges[2] = map[string]struct{}{
pb.OperationKubecitSystemSettings: {},
pb.OperationKubecitSearchCourse: {},
pb.OperationKubecitRegisterUsername: {},
pb.OperationKubecitMostNew: {},
pb.OperationKubecitLoginByJson: {},
pb.OperationKubecitGetSlider: {},
pb.OperationKubecitGetTeacher: {},
pb.OperationKubecitListAllTeacher: {},
pb.OperationKubecitListCategory: {},
pb.OperationKubecitListCategoryV2: {},
pb.OperationKubecitListLessons: {},
pb.OperationKubecitGetCourse: {},
pb.OperationKubecitGetInfo: {},
pb.OperationKubecitMyOrderList: {},
pb.OperationKubecitCreateOrder: {},
pb.OperationKubecitWalletBalance: {},
}
// Role Lecturer
RolePrivileges[3] = map[string]struct{}{
pb.OperationKubecitSystemSettings: {},
pb.OperationKubecitSearchCourse: {},
pb.OperationKubecitRegisterUsername: {},
pb.OperationKubecitMostNew: {},
pb.OperationKubecitLoginByJson: {},
pb.OperationKubecitGetSlider: {},
pb.OperationKubecitGetTeacher: {},
pb.OperationKubecitListAllTeacher: {},
pb.OperationKubecitListCategory: {},
pb.OperationKubecitListCategoryV2: {},
pb.OperationKubecitListLessons: {},
pb.OperationKubecitGetCourse: {},
pb.OperationKubecitGetInfo: {},
pb.OperationKubecitMyOrderList: {},
pb.OperationKubecitCreateOrder: {},
pb.OperationKubecitWalletBalance: {},
}
// Role Admin
RolePrivileges[4] = map[string]struct{}{
pb.OperationKubecitCreateCategory: {},
pb.OperationKubecitCreateChapter: {},
pb.OperationKubecitCreateCourse: {},
pb.OperationKubecitCreateLesson: {},
pb.OperationKubecitCreateOrder: {},
pb.OperationKubecitCreateSlider: {},
pb.OperationKubecitCreateTeacher: {},
pb.OperationKubecitDeleteCategory: {},
pb.OperationKubecitDeleteChapter: {},
pb.OperationKubecitDeleteCourse: {},
pb.OperationKubecitDeleteLesson: {},
pb.OperationKubecitDeleteSlider: {},
pb.OperationKubecitGetCourse: {},
pb.OperationKubecitGetInfo: {},
pb.OperationKubecitGetSlider: {},
pb.OperationKubecitGetTeacher: {},
pb.OperationKubecitListAllTeacher: {},
pb.OperationKubecitListCategory: {},
pb.OperationKubecitListCategoryV2: {},
pb.OperationKubecitListLessons: {},
pb.OperationKubecitListSlidersByPriority: {},
pb.OperationKubecitLoginByJson: {},
pb.OperationKubecitMostNew: {},
pb.OperationKubecitMyOrderList: {},
pb.OperationKubecitRechargeWallet: {},
pb.OperationKubecitRegisterUsername: {},
pb.OperationKubecitReviewCourse: {},
pb.OperationKubecitSearchCourse: {},
pb.OperationKubecitSystemSettings: {},
pb.OperationKubecitUpdateCategory: {},
pb.OperationKubecitUpdateChapter: {},
pb.OperationKubecitUpdateCourse: {},
pb.OperationKubecitUpdateLesson: {},
pb.OperationKubecitUpdateSlider: {},
pb.OperationKubecitWalletBalance: {},
}

}