تطبيق تصريح البناء الإلكتروني للكانتونات السويسرية.
يحتوي هذا المستودع على الكود المصدري لتطبيقات الويب المستخدمة للتعامل مع تصاريح البناء الإلكترونية والعمليات المماثلة في الكانتونات السويسرية في بيرن ، غريسون ، شويز ، سولوثورن ، أوري.
تُظهر الصورة التالية نظرة عامة على المستوى العالي للهندسة المعمارية:
ember-ebau-core
. ├── compose # docker-compose files
├── db # database Dockerfile and utils
├── django # backend code, containing both API and Caluma
├── document-merge-service # document generation templates and config
├── ember-caluma-portal # Caluma-based portal
├── ember-camac-ng # Ember.js app optimized for embedding in other applications
├── ember-ebau # Ember.js based application for internal area
├── ember-ebau-core # Ember.js addon for code sharing between multiple Ember.js apps
├── keycloak # Keycloak configuration for local development
├── proxy # Nginx configuration for local development
└── tools # miscellaneous utilities
بسبب أعمال التحديث المستمرة ، لم يتم دمج بعض وحدات الواجهة الأمامية في ember-ebau
، ولكن بدلاً من ذلك لا تزال جزءًا من ember-camac-ng
. عدد قليل من وحدات الواجهة الأمامية ليست جزءًا من هذا المستودع على الإطلاق. يسرد الجدول التالي الوحدات النمطية الأكثر أهمية في الجزء "الداخلي" من التطبيق وحالة اكتمال / تكامل كل منها (في التكوين demo
).
الوحدة النمطية | وصف | الخلفية | الواجهة | جزء من Ember-Ebau |
---|---|---|---|---|
NAV الرئيسي (مورد) | ||||
قائمة ملف | عرض قائمة بالملفات | ✔ | ✔ | ✔ |
قائمة المهام | عرض قائمة بالمهام | ✔ | ✔ | ✔ |
قوالب | إدارة قوالب المستندات (DOCX) | ✔ | ✔ | ✔ |
التنظيم / الأذونات | إدارة المنظمات والأذونات الخاصة | ✔ | ✔ | ✔ |
محتوى ثابت | محتوى ثابت ، محرر مولد | ✔ | ✔ | ✔ |
مكونات النص | إدارة المقتطفات للاستخدام في حقول النص | ✔ | ⏳ | ⏳ |
subnav (مورد مثيل) | ||||
المهام | عرض المهام وإدارتها | ✔ | ✔ | ✔ |
استمارة | عرض وتحرير النموذج الرئيسي | ✔ | ✔ | ✔ |
توزيع | احصل على ملاحظات من المنظمات الأخرى | ✔ | ✔ | ✔ |
الإسكندرية | إدارة المستندات | ✔ | ✔ | ✔ |
نموذج | توليد مستند من القالب | ✔ | ✔ | ✔ |
مجلة | دفتر ملاحظات تعاوني | ✔ | ✔ | ✔ |
تاريخ | يظهر المعالم والبيانات التاريخية | ✔ | ✔ | ✔ |
النشر | إدارة النشر في الصحف | ✔ | ✔ | ✔ |
الاعتراضات | إدارة الاعتراضات | ✔ | ✔ | ✔ |
مسؤول | تعيين المستخدمين المسؤولين | ✔ | ✔ | ✔ |
المطالبات | اسأل مقدم الطلب للحصول على معلومات إضافية | ✔ | ✔ | ✔ |
الرفض | رفض مثيل | ✔ | ✔ | ✔ |
الفواتير | إدارة إدخالات الفواتير | ✔ | ✔ | ✔ |
مراجعة | إجراء التدقيق المهيكلة | ✔ | ✔ | ⏳ |
تدقيق السطوع | يظهر تغييرات الشكل | ✔ | ⏳ | ⏳ |
تعتمد بيئة التنمية المفضلة على Docker.
للتنمية المحلية:
بيثون:
ember:
يمكن استخدام Docker للحصول على ebau وتشغيل بسرعة. يوجهك البرنامج النصي التالي من خلال عملية الإعداد. نوصي باستخدام التكوين kt_gr
أو kt_so
في الوقت الحالي ، حيث لا تزال الكانتونات الأخرى تعتمد على المكونات القديمة للمنطقة الداخلية التي ليست جزءًا من هذا المستودع.
make start-dev-env
في حال كنت ترغب في تعديل /etc /hosts يدويًا ، يجب أن تشير إلى 127.0.0.1 (LocalHost):
ebau-portal.local ebau.local ebau-keycloak.local ember-ebau.local ebau-rest-portal.local
للشيكات التلقائية أثناء الالتزام (التنسيق ، linting) ، يمكنك إعداد خطاف git مع الأوامر التالية:
pip install pre-commit
pre-commit install
بعد ذلك ، يجب أن تكون قادرًا على استخدام الخدمات التالية:
حسابات المسؤول التالية موجودة في keycloak أو DB ، على التوالي:
طلب | دور | اسم المستخدم | كلمة المرور | ملحوظات |
---|---|---|---|---|
العرض التوضيحي | مسؤل | مستخدم | مستخدم | |
KT_SCHWYZ | مسؤل | مسؤل | مسؤل | |
النشر | أديسي | أديسي | ||
KT_URI | مسؤل | مسؤل | مسؤل | |
بوابة | منفذ | منفذ | ||
KT_BERN | مسؤل | مستخدم | مستخدم | |
KT_GR | مسؤل | مسؤل | مسؤل | |
مقدم الطلب | محرر | محرر | دور محرر مقدم الطلب | |
مقدم الطلب | قراءة | قراءة | دور المتقدم القراءة | |
KT_SO | مسؤل | مسؤل | مسؤل | |
مقدم الطلب | محرر | محرر | دور محرر مقدم الطلب | |
مقدم الطلب | قراءة | قراءة | دور المتقدم القراءة |
make debug-django
مع Docker Compose ، يمكنك إرفاق حاوية قيد التشغيل (أي ما يعادل بشكل أساسي لـ docker compose up
بدون علامة -d
) والتفاعل عبر stdin.
docker compose attach django
هذا سيسمح لك بذلك
أ. إرسال إشارات إلى الحاوية
ب. انزل إلى قذيفة PDB عندما يتم تشغيل التطبيق إلى breakpoint
نظرًا لأن تكوين DEV يدير خادم تطوير Django الذي يقوم بإعادة تحميل الملفات في الملف ، فإن إدخال نقاط التوقف هذه فعالة مباشرة بعد حفظ الملف.
اضغط على CTRL-p + CTRL-q
ملاحظة: نظرًا لأن عملية attach
ستعمل بشكل افتراضي على إعادة توجيه الإشارات إلى الحاوية التي سيتعين عليك الخروج منها بالضغط على التسلسل المذكور (وهو الإعداد الافتراضي لـ- --detach-keys
ويمكن تجاوزه). ومع ذلك ، فإن الضغط على CTRL-c
لن يقتصر فقط على قتل Tty ولكن أيضًا أرسل sigint إلى الحاوية وإيقافه.
المستندات: https://docs.docker.com/reference/cli/docker/container/attach/
docker-compose up -d --build db django
cd {ember | ember-camac-ng | ember-caluma-portal | ember-ebau} # Enter ember from the top level of the repo
pnpm install # Install dependencies
pnpm test # Run tests
pnpm start-proxy # Run dev server with proxy to django api
نظرًا لأن هذا مشروع كبير يحتوي على الكثير من الملفات ، فإن الإعداد الافتراضي لـ Ember سيفشل في إعادة البناء بشكل صحيح لأنه لا يمكن مشاهدة كل هذه الملفات.
لإصلاح ذلك ، قم بتثبيت Watchman كمراقب ملفات وضبط إعدادات inotify
:
echo fs.inotify.max_user_watches=1000000 | sudo tee -a /etc/sysctl.conf # adjust settings
sudo sysctl -p # re-read config
تأكد من أن الأمر الأخير يرجع قيمة واحدة فقط ، وإلا فإن الإعدادات مكررة وتحتاج إلى تنظيفها.
لاحظ أن التطبيقات ember-caluma-portal
و ember-camac-ng
و ember-ebau
و addon ember-ebau-core
تشترك في نفس شجرة الوحدات النمطية من خلال مساحة عمل PNPM.
تتيح لنا مساحة عمل PNPM المشتركة مشاركة التعليمات البرمجية (EG Addons) بين التطبيقات التي تعد جزءًا من هذا الريبو (بدلاً من اتباع النهج النموذجي لإصدارات النشر على NPM). هذا يعني أيضًا ذلك
node_modules
ember-caluma-portal
و ember-camac-ng
يجب أن تبقي متزامنة لتمكين django-silk
للتوصيف ، ما عليك سوى إضافة DJANGO_ENABLE_SILK=True
في ملف django/.env
الخاص بك. ثم أعد تشغيل حاوية Django وتصفحها إلى http: //ebau.local/api/silk/.
للتبديل من التكوين demo
إلى kt_bern
، يتعين على المرء التأكد من أن تطبيقات الواجهة الأمامية تأخذ متغيرات البيئة المناسبة.
pnpm start-proxy
make kt_bern
docker-compose up -d && make loadconfig
docker-compose down
make kt_bern
docker-compose build
docker-compose up -d
تُلزم إعدادات التصحيح عن بُعد لـ VS Code بالمستودع.
.vscode/launch.json
. لتمكين التصحيح في حاوية Django ، يجب بدء تشغيل خادم PTVSD. نظرًا لأن خادم التصحيح هذا يصطدم بإعدادات أخرى (Pycharm ، Pydev) ، لن يتم تشغيله إلا إذا تم تعيين Env var ENABLE_PTVSD_DEBUGGER
على True
في django/.env
.
من أجل التحدث إلى نقطة نهاية /graphql
مع المصادقة ، يمكنك تثبيت أداة GraphQL (مثل ساعي البريد). الأدوات التي قد تفكر فيها هنا:
تم تطوير وحدة GWR في مستودعين منفصلين:
إذا كنت تستخدم وحدة GWR ، فأنت بحاجة إلى إنشاء مفتاح Fernet وفقًا لوثائق الواجهة الخلفية GWR.
تحتاج إلى تعيين هذا المفتاح في كل بيئة/خادم في ملف ENV الخاص بك. قم بإنشاء مفتاح منفصل لكل بيئة ، نظرًا لأن هذا يستخدم لتخزين / قراءة كلمات مرور مستخدم GWR.
يجب تصميم API بطريقة ما ، مما يسمح باستخدامه من قبل أي مشروع ebau. للتخصيص المطلوب ، تنطبق القواعد التالية:
للاطلاع على علامات وأذونات الميزات المختلفة ، راجع APPLICATIONS
في الإعدادات.
في وضع التطوير ، يتم تكوين التطبيق لإرسال جميع البريد الإلكتروني إلى مثيل MailPit ، لذلك ما لم تحدد شيئًا آخر ، فلن يتم إرسال بريد إلكتروني من بيئة التطوير.
يمكنك الوصول إلى MailPit عبر http: //ebau.local/mailpit/. أي بريد إلكتروني يتم إرساله سيكون مرئيًا على الفور هناك.
قسم لجمع المعلومات عن الوحدات النمطية والكتانتونات. يهدف هذا القسم إلى تسهيل نقل المعرفة ، وسداد العطلات ، وحالات دعم تصحيح الأخطاء.
الوحدة المستخدمة في KT. SZ و KT. أور (قريبا) ، الذي يرافق عملية البناء بعد القرار. البلدية (حتى الآن تتم تغطية الحالات فقط عندما تكون السلطة الرئيسية هي البلدية) ويتفاعل مقدم الطلب من خلال سلسلة من عناصر العمل مع المستندات.
هناك مراحل بناء ("BauetAppen") ، والتي تتكون من خطوات بناء يمكن اختيارها ديناميكيًا. خطوات البناء هي سلسلة من بنود العمل ، والتي عادة ما تتبع نمط البدء ببنية عمل موجهة إلى مقدم الطلب ، تليها واحدة أو أكثر عناصر عمل موجهة إلى البلدية. يؤكد مقدم الطلب ، أنهم التزموا باللوائح المحددة ، والتحقق من ذلك. يتيح عنصر العمل النهائي للمنكونياليت أن يقرر ما إذا كان سيتم متابعة العملية أو إعادة التثبيت إلى بداية خطوة البناء.
يتم تعريف الوحدة بشكل كبير بواسطة سير العمل المكون. ما هي خطوات البناء ، وبالتالي يتم التعامل مع عناصر العمل التي يتم تنفيذها من خلال المهام الديناميكية. تكوين خطوة البناء (مثل المهمة التي تنتمي إلى خطوة البناء) التي تم تكوينها في التعريف للمهام التي تنتمي إلى خطوة بناء. خطوات البناء هي في الأساس مجموعة من المهام ، لا يوجد نموذج يمثلها.
مراحل البناء هي عنصر عمل متعدد مثيل مع حالة أطفال. تحتوي حالة الأطفال على بنالات العمل خطوة البناء. يتم إنشاء مرحلة البناء الأولى عند تهيئة عملية مراقبة البناء. بعد ذلك ، يمكن تهيئة مرحلة البناء الجديدة من خلال إنشاء طفرة عنصر عمل على عنصر العمل الحالي (في الحالة جاهزة). احذر: للتأكد من أنه يمكن دائمًا إنشاء مرحلة بناء جديدة طالما لم تكتمل عملية مراقبة البناء ، تظل عناصر عمل مرحلة البناء جاهزة ، بينما تم بالفعل اكتمال حالة الأطفال في مرحلة البناء.
يوجد المنطق الأساسي بشكل أساسي في سير عمل مراقبة البناء وتكوين النموذج من كانتون ، وأحداث Caluma لمراقبة البناء ، وإعدادات الوحدة النمطية ، وبعض الرؤية المخصصة ومنطق الإذن.
في كانتون Solothurn نستخدم آلية تفويض مخصصة لبوابة Ebau. لا يمكن استخدام بوابة eBau إلا مع تسجيل دخول من My.s.ch ، برنامج بوابة EGOV. نظرًا لأنهم لا يقدمون ترخيص OIDC ، فقد اضطررنا إلى تنفيذ حل مخصص باستخدام KeyCloak Token Exchange وميزات الانتحال المجردة المباشرة.
تم تصميم التفويض لإعداد رمز JWT مشفرة وموقّعة والذي يتم تحويله بعد ذلك إلى رمز OIDC JWT منتظم بواسطة keycloak:
Sequencediagram
أوتون
المشارك F كما بوابة ebau
المشارك M كبوابة Egov
المشارك ب مثل ebau API
المشارك K كما keycloak
F->>+M: إعادة التوجيه إلى Prettation
ملاحظة يمين M: رمز JWT المشفر والموقع مع بيانات المستخدم
M->>-F: إعادة توجيه لتسجيل الدخول باستخدام رمز EGOV
F->>+B: إرسال رمز (post to to/api/v1/auth/exchange)
ب->> ب: فك التشفير والتحقق من رمز EGOV ، استخرج بيانات المستخدم من الرمز المميز
ب->>+ك: إنشاء أو تحديث المستخدم
K->> B: إرجاع المستخدم
ب->> ك: تبادل رمز مع انتحال شخصية عارية مباشرة
K->>-ب: الرمز المميز لإرجاع المستخدم للمستخدم
ب->>-و: الرمز المميز لإرجاع
لتمكين الميزة ، يجب القيام بالتكوين التالي:
بشكل افتراضي ، تم بالفعل تكوين KeyCloak بشكل صحيح لدعم آلية التفويض هذه. من أجل تكوين بيئة أخرى ، يرجى الرجوع إلى الوثائق
# .env
ENABLE_TOKEN_EXCHANGE =true
سيمكن هذا الميزة مع بوابة EGOV وهمية مستضافة على وكيل NGINX الخاص بنا. من أجل الاختبار مع بيئة اختبار بوابة EGOV ، نحتاج إلى تعيين بعض متغيرات البيئة (يمكن العثور على القيم الخاضعة للرقابة في Vault):
# .env
EGOV_PORTAL_URL =****
EGOV_PRESTATION_PATH =****
# django/.env
TOKEN_EXCHANGE_JWT_ISSUER =****
TOKEN_EXCHANGE_JWT_SECRET =****
TOKEN_EXCHANGE_JWE_SECRET =****
تم ترخيص هذا المشروع بموجب EUPL-1.2-or-Later. انظر الترخيص للحصول على التفاصيل.