Баннер режима разработки в шапке с личным выключателем

Пока лицензия разрешает режим разработки, в шапке висит баннер; нажатие выключает режим визуально для этого пользователя и включает обратно. В шаблонах .DevMode заменён на devOn.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
zuevav
2026-09-18 11:18:27 +03:00
parent 054222d154
commit b4b4788035
18 changed files with 152 additions and 72 deletions
+11 -5
View File
@@ -1272,15 +1272,18 @@ func registerUsersSetup(mux *http.ServeMux, h *setupHandlers) {
mux.HandleFunc("/admin/setup/auth", h.saveAuth)
mux.HandleFunc("/admin/setup/auth/test", h.testAD)
mux.HandleFunc("/admin/setup/auth/recheck", h.recheckAD)
mux.HandleFunc("/admin/dev-toggle", devToggle) // личный выключатель режима разработки
}
// ---------- функции шаблонов ----------
// authTemplateFuncs — заглушки, переопределяются в render на текущего пользователя.
var authTemplateFuncs = template.FuncMap{
"curUser": func() *User { return nil },
"can": func(perm string) bool { return true },
"authOpen": authOpen,
"curUser": func() *User { return nil },
"can": func(perm string) bool { return true },
"authOpen": authOpen,
"devOn": func() bool { return devMode(globalRC) }, // режим действует для текущего пользователя
"devLicensed": func() bool { return devMode(globalRC) }, // режим разрешён лицензией (для баннера)
}
// renderFor — выполняет layout с функциями, привязанными к текущему пользователю.
@@ -1290,11 +1293,14 @@ func renderFor(w http.ResponseWriter, t *template.Template, data any) error {
if err != nil {
return t.ExecuteTemplate(w, "layout", data)
}
on := devOnFor(u)
t2.Funcs(template.FuncMap{
"curUser": func() *User { return u },
"curUser": func() *User { return u },
"devOn": func() bool { return on },
"devLicensed": func() bool { return devMode(globalRC) },
"can": func(perm string) bool {
if perm == "dev" {
return devMode(globalRC) && (authOpen() || u.Can("settings"))
return on && (authOpen() || u.Can("settings"))
}
if authOpen() {
return true