| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package main
- import (
- "fmt"
- "os"
- "path/filepath"
- "text/template"
- )
- const permsTpl = `// Code generated by permgen. DO NOT EDIT.
- package perms
- import "code.clickto.dev/weiym/permlib"
- // Perms 权限声明列表,启动时调用 engine.RegisterPerms(Perms) 同步到权限系统
- var Perms = []permlib.PermDecl{
- {{- range .Perms}}
- {Code: {{printf "%q" .Code}}, Name: {{printf "%q" .Name}}},
- {{- end}}
- }
- // RoutePerms 路由-权限映射,启动时调用 engine.RegisterRoutePerms(RoutePerms)
- var RoutePerms = []permlib.RoutePermDecl{
- {{- range .RoutePerms}}
- {Method: {{printf "%q" .Method}}, Path: {{printf "%q" .Path}}, PermCode: {{printf "%q" .PermCode}}, DataCode: {{printf "%q" .DataCode}}},
- {{- end}}
- }
- // FieldPerms 字段权限映射,启动时调用 engine.RegisterFieldPerms(FieldPerms)
- var FieldPerms = map[string]permlib.FieldPermMap{
- {{- range $key, $fm := .FieldPerms}}
- {{printf "%q" $key}}: {
- {{- if $fm.Request}}
- Request: map[string]string{
- {{- range $field, $code := $fm.Request}}
- {{printf "%q" $field}}: {{printf "%q" $code}},
- {{- end}}
- },
- {{- end}}
- {{- if $fm.Response}}
- Response: map[string]string{
- {{- range $field, $code := $fm.Response}}
- {{printf "%q" $field}}: {{printf "%q" $code}},
- {{- end}}
- },
- {{- end}}
- },
- {{- end}}
- }
- `
- type templateData struct {
- Perms []permDecl
- RoutePerms []routePermDecl
- FieldPerms map[string]fieldPermMap
- }
- func generate(result *collectResult, dir string) error {
- outDir := filepath.Join(dir, "internal", "perms")
- if err := os.MkdirAll(outDir, 0755); err != nil {
- return fmt.Errorf("创建目录失败: %w", err)
- }
- outFile := filepath.Join(outDir, "perms.go")
- tpl, err := template.New("perms").Funcs(template.FuncMap{
- "printf": fmt.Sprintf,
- }).Parse(permsTpl)
- if err != nil {
- return fmt.Errorf("解析模板失败: %w", err)
- }
- f, err := os.Create(outFile)
- if err != nil {
- return fmt.Errorf("创建文件失败: %w", err)
- }
- defer f.Close()
- data := templateData{
- Perms: result.perms,
- RoutePerms: result.routePerms,
- FieldPerms: result.fieldPerms,
- }
- if err := tpl.Execute(f, data); err != nil {
- return fmt.Errorf("生成文件失败: %w", err)
- }
- fmt.Fprintf(os.Stdout, "permgen: generated %s (%d perms, %d routes, %d field maps)\n",
- outFile,
- len(result.perms),
- len(result.routePerms),
- len(result.fieldPerms),
- )
- return nil
- }
|