📄️ Intro
Описанный паттерн позволяет реализовать гибкую систему доступов на стороне клиента.
📄️ Вдохновлено ABAC и XAML
Описанный паттерн берет за основу принципы ABAC (Attribute-Based Access Control) и XAML.
diff --git a/404.html b/404.html index b43a469..fb10eaf 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
index.html
\u0438 inject env",id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-\u0438-inject-env",level:2},{value:"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f index.html
\u0438\u0437 index.template.html
",id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-\u0438\u0437-indextemplatehtml",level:3},{value:"\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 index.template.html
",id:"\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435-indextemplatehtml",level:4},{value:"\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d index.template.html
\u0438 \u043f\u043e\u0447\u0435\u043c\u0443 index.html
\u0432 .gitignore
?",id:"\u0437\u0430\u0447\u0435\u043c-\u043d\u0443\u0436\u0435\u043d-indextemplatehtml-\u0438-\u043f\u043e\u0447\u0435\u043c\u0443-indexhtml-\u0432-gitignore",level:4},{value:"\u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 inject env \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f bash \u0441\u043a\u0440\u0438\u043f\u0442\u044b.",id:"\u0434\u043b\u044f-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438-\u0438-inject-env-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f-bash-\u0441\u043a\u0440\u0438\u043f\u0442\u044b",level:4},{value:"Dev Mode",id:"dev-mode",level:2},{value:"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f index.html
. generateEnv.dev.sh
\u0441\u043a\u0440\u0438\u043f\u0442",id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-generateenvdevsh-\u0441\u043a\u0440\u0438\u043f\u0442",level:3},{value:"Prod Mode",id:"prod-mode",level:2},{value:"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f index.html
",id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml",level:3},{value:"Dockerfile",id:"dockerfile",level:4},{value:"\u0421\u043a\u0440\u0438\u043f\u0442 startup.prod.sh
",id:"\u0441\u043a\u0440\u0438\u043f\u0442-startupprodsh",level:4},{value:"\u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 nginx",id:"\u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445-\u0432-nginx",level:3},{value:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 env \u0438\u0437 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430",id:"\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435-env-\u0438\u0437-\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e-\u0444\u0430\u0439\u043b\u0430",level:2},{value:"\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 inject env \u0432 index.html
",id:"\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430-inject-env-\u0432-indexhtml",level:2}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.M)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.h1,{id:"csr--nginx-\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435-env",children:"CSR + Nginx. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 env"}),"\n",(0,d.jsx)(n.p,{children:"\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 CSR \u0438 Nginx \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0438\u043a\u0438."}),"\n",(0,d.jsx)(n.h2,{id:"\u043f\u0440\u0438\u043c\u0435\u0440",children:"\u041f\u0440\u0438\u043c\u0435\u0440"}),"\n",(0,d.jsxs)(n.p,{children:["\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 ",(0,d.jsx)(n.a,{href:"https://github.com/kaluga-astral/vite-boilerplate/tree/main",children:"vite-boilerplate"}),"."]}),"\n",(0,d.jsx)(n.h2,{id:"\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430-\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f-env-\u0432-build-time",children:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f env \u0432 build time"}),"\n",(0,d.jsx)(n.p,{children:"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 env \u0432 build time - \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434."}),"\n",(0,d.jsx)(n.p,{children:"\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:"}),"\n",(0,d.jsxs)(n.ol,{children:["\n",(0,d.jsx)(n.li,{children:"\u0421\u0431\u043e\u0440\u0449\u0438\u043a \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442"}),"\n",(0,d.jsxs)(n.li,{children:["\u041b\u0438\u0431\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 env \u0432 ",(0,d.jsx)(n.code,{children:"import.meta.env"})," (vite), \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0435\u0442 replace ",(0,d.jsx)(n.code,{children:"process.env"})," \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 js \u043a\u043e\u0434\u0435 (webpack)"]}),"\n",(0,d.jsx)(n.li,{children:"\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 js"}),"\n"]}),"\n",(0,d.jsx)(n.p,{children:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsx)(n.li,{children:"\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 env \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435"}),"\n",(0,d.jsx)(n.li,{children:"\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 white label, \u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0440\u0435\u043d\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 docker image.\n\u042d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f"}),"\n"]}),"\n",(0,d.jsx)(n.p,{children:"\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c inject env \u0432 html \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430."}),"\n",(0,d.jsxs)(n.h2,{id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-\u0438-inject-env",children:["\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f ",(0,d.jsx)(n.code,{children:"index.html"})," \u0438 inject env"]}),"\n",(0,d.jsxs)(n.p,{children:["\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c ",(0,d.jsx)(n.code,{children:"index.html"})," \u0438 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 html env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435."]}),"\n",(0,d.jsxs)(n.h3,{id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-\u0438\u0437-indextemplatehtml",children:["\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f ",(0,d.jsx)(n.code,{children:"index.html"})," \u0438\u0437 ",(0,d.jsx)(n.code,{children:"index.template.html"})]}),"\n",(0,d.jsxs)(n.p,{children:["\u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e ",(0,d.jsx)(n.code,{children:"index.template.html"})," - \u044d\u0442\u043e \u0448\u0430\u0431\u043b\u043e\u043d html, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d ",(0,d.jsx)(n.code,{children:"index.html"}),"."]}),"\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"index.html"})," \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 ",(0,d.jsx)(n.code,{children:".gitignore"}),"."]}),"\n",(0,d.jsxs)(n.h4,{id:"\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435-indextemplatehtml",children:["\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ",(0,d.jsx)(n.code,{children:"index.template.html"})]}),"\n",(0,d.jsx)(n.p,{children:(0,d.jsx)(n.strong,{children:(0,d.jsx)(n.a,{href:"https://github.com/kaluga-astral/vite-boilerplate/blob/main/index.template.html",children:"\u041f\u0440\u0438\u043c\u0435\u0440 index.template.html"})})}),"\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"index.template.html"})," \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0438 ",(0,d.jsx)(n.code,{children:"
-
+
+
-Паттерн реализации системы доступов на клиенте
Описанный паттерн позволяет реализовать гибкую систему доступов на стороне клиента.
Описанный паттерн берет за основу принципы ABAC (Attribute-Based Access Control) и XAML.