package mid //import ( // "log" // "net/http" // "time" // // "management/internal/erpserver/model/dto" // v1 "management/internal/erpserver/service/v1" // "management/internal/pkg/know" // "management/internal/pkg/session" //) // //var publicRoutes = map[string]bool{ // "/home.html": true, // "/dashboard": true, // "/system/menus": true, // "/upload/img": true, // "/upload/file": true, // "/upload/multi_files": true, // "/pear.json": true, // "/logout": true, //} // //func Authorize( // sess session.Manager, // menuService v1.MenuService, //) func(http.Handler) http.Handler { // return func(next http.Handler) http.Handler { // return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // ctx := r.Context() // path := r.URL.Path // // // 登陆检查 // n := time.Now() // user, err := sess.GetUser(ctx, know.StoreName) // if err != nil || user.ID == 0 { // http.Redirect(w, r, "/", http.StatusFound) // return // } // // log.Printf("scs get user: %s", time.Since(n).String()) // // // 公共路由放行 // if publicRoutes[path] { // ctx = setUser(ctx, user) // next.ServeHTTP(w, r.WithContext(ctx)) // return // } // // n1 := time.Now() // // 权限检查 // menus, err := menuService.ListByRoleIDToMap(ctx, user.RoleID) // if err != nil || !hasPermission(menus, path) { // http.Error(w, "Forbidden", http.StatusForbidden) // return // } // // log.Printf("listByRoleIDToMap: %s", time.Since(n1).String()) // // n2 := time.Now() // cur := getCurrentMenus(menus, path) // log.Printf("getCurrentMenus: %s", time.Since(n2).String()) // // ctx = setUser(ctx, user) // ctx = setCurMenus(ctx, cur) // // next.ServeHTTP(w, r.WithContext(ctx)) // }) // } //} // //func hasPermission(menus map[string]*dto.OwnerMenuDto, path string) bool { // _, ok := menus[path] // return ok //} // //func getCurrentMenus(data map[string]*dto.OwnerMenuDto, path string) []dto.OwnerMenuDto { // var res []dto.OwnerMenuDto // // menu, ok := data[path] // if !ok { // return res // } // // for _, item := range data { // if menu.IsList { // if item.ParentID == menu.ID || item.ID == menu.ID { // res = append(res, *item) // } // } else { // if item.ParentID == menu.ParentID { // res = append(res, *item) // } // } // } // // return res //}