gorm wire
This commit is contained in:
106
internal/pkg/render/html.go
Normal file
106
internal/pkg/render/html.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package render
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"management/internal/erpserver/model/dto"
|
||||
"management/internal/pkg/know"
|
||||
|
||||
"github.com/justinas/nosurf"
|
||||
)
|
||||
|
||||
type TemplateConfig struct {
|
||||
Root string
|
||||
Extension string
|
||||
Layout string
|
||||
Partial string
|
||||
}
|
||||
|
||||
type HtmlData struct {
|
||||
IsAuthenticated bool
|
||||
AuthorizeUser dto.AuthorizeUser
|
||||
AuthorizeMenus []*dto.OwnerMenuDto
|
||||
Data any
|
||||
}
|
||||
|
||||
func (r *render) HTML(w http.ResponseWriter, req *http.Request, tpl string, data map[string]any) {
|
||||
name := strings.ReplaceAll(tpl, "/", "_")
|
||||
t, ok := r.templates[name]
|
||||
if !ok {
|
||||
http.Error(w, "template is empty", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
hd := r.setDefaultData(req, data)
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
err := t.ExecuteTemplate(buf, filepath.Base(tpl), hd)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = buf.WriteTo(w)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func (r *render) setDefaultData(req *http.Request, data map[string]any) map[string]any {
|
||||
if data == nil {
|
||||
data = make(map[string]any)
|
||||
}
|
||||
|
||||
ctx := req.Context()
|
||||
isAuth := r.session.Exists(ctx, know.StoreName)
|
||||
data["IsAuthenticated"] = isAuth
|
||||
if isAuth {
|
||||
var authUser dto.AuthorizeUser
|
||||
u := r.session.GetBytes(ctx, know.StoreName)
|
||||
_ = json.Unmarshal(u, &authUser)
|
||||
|
||||
data["AuthorizeMenus"] = r.getCurrentPathButtons(ctx, authUser.RoleID, req.URL.Path)
|
||||
}
|
||||
token := nosurf.Token(req)
|
||||
data["CsrfToken"] = token
|
||||
data["CsrfTokenField"] = template.HTML(fmt.Sprintf(`<input type="hidden" name="csrf_token" value="%s" />`, token))
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (r *render) getCurrentPathButtons(ctx context.Context, roleID int32, path string) []*dto.OwnerMenuDto {
|
||||
var res []*dto.OwnerMenuDto
|
||||
|
||||
// 获取当前登陆角色的权限
|
||||
menus, err := r.menuService.ListByRoleIDToMap(ctx, roleID)
|
||||
if err != nil {
|
||||
return res
|
||||
}
|
||||
|
||||
menu, ok := menus[path]
|
||||
if !ok {
|
||||
return res
|
||||
}
|
||||
|
||||
for _, item := range menus {
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user