Ibinahaging mga subdomain, dalawang pasukan: sino ang nakakakita ng aling mga rekord?
Ang subdomain ang pumipili ng branding, ang beripikadong pagiging miyembro ang pumipili ng datos. Patakbuhin ang parehong mga pagsusuri ng nangungupahan mula man sa isang address ng opisina o sa VPN.
Ibinabahagi ng Klinika A at Klinika B ang isang codebase, dalawang subdomain, at pinaghalong bisita mula sa opisina at sa VPN. Karaniwang hiwalay na kino-configure ng mga team ng network ang dalawang pasukan, at ayos lang iyon, hangga't hindi ginagawa ito ng aplikasyon. Ang mga pagsusuri sa ibaba ay dapat nasa aplikasyon at dapat kumilos nang pareho kahit aling pinto ang ginamit ng kahilingan.
Una: pinapangalanan lang ng hostname ang isang nangungupahan
I-resolve ang hinihiling na hostname laban sa isang mapping na pinapanatili ng administrator, at tanggihan ang anumang hindi kilala. Gamitin ang beripikadong halaga ng host ng framework sa halip na ang hilaw na header, para hindi makapag-inject ng lookup key ang isang ginawang Host. Sinasabi ng matagumpay na tugma sa code kung aling configuration ng nangungupahan at aling branding ang i-load. Wala itong sinasabi tungkol sa kung maaaring makita ng tumatawag ang datos ng nangungupahang iyon. Itago ang pangalawang tanong na iyon sa hiwalay na function na may hiwalay na input.
Ang isang ibinahaging helper function na nagbabalik ng parehong konteksto at pahintulot mula sa isang paghahanap ng hostname ay simula ng bug.
Pangalawa: nagmumula sa session ang pagiging miyembro
Hanapin ang mga aktibong pagiging miyembro ng beripikadong user at ihambing ang mga ito sa nangungupahan mula sa unang pagsusuri. Ang user na kabilang sa parehong klinika ay maaaring lumipat, ngunit ang paglipat ay dapat isang tahasang aksyon na naitala sa konteksto ng kahilingan, hindi isang haka-haka mula sa URL. Ang user na kabilang sa isang klinika at humihiling ng isa pa ay tinatanggihan, kabilang ang mga download at tawag sa API.
Subukan ang negatibong kaso sa pamamagitan ng pag-edit ng identifier ng rekord at parameter ng nangungupahan. Kung ang alinman sa dalawang pagbabago ay nagbabalik ng datos, ang saklaw ay binabasa mula sa kahilingan at hindi mula sa beripikadong pagiging miyembro.
Ang saklaw ng cookie at ang isahang pag-sign in ang nagpapasya kung saan maipapakita ang isang account. Hindi nila pinapasya kung ano ang maaaring basahin ng account na iyon.
Pangatlo: walang pinapatunayan ang network tungkol sa tao
Ang gateway ng VPN ay nagpapatunay ng isang tunnel, at ang pampublikong listahan ng pinapayagan ay nagpapatunay ng isang hanay ng address. Wala sa dalawa ang kumikilala sa isang tao. Pinagsasama-sama ng NAT ang maraming user sa isang source address, at ginagawa rin ito ng hanay ng opisina para sa lahat sa gusali. Tratuhin ang dalawa bilang mga katotohanan ng transportasyon at itago ang awtorisasyon sa aplikasyon, o sa isang integrasyon na tahasang nag-aangkin ng pagkakakilanlan at sinusuri ayon dito.
Ang DNS ay isang pangatlong katotohanan ng transportasyon. Ang pribadong sagot ay nangangailangan ng pribadong ruta, at ang pampublikong frontend ay nangangailangan ng sinusuportahang landas ng pinagmulan. Wala sa kanila ang nagdadala ng pahintulot.
Isang pangungusap na isasabit sa dingding: pinapasya ng network kung paano dumarating ang kahilingan, at pinapasya ng aplikasyon kung ano ang maaaring basahin nito.
Pang-apat: patakbuhin ang matrix sa dalawang pasukan
Gumamit ng mga kontroladong account para subukan ang A sa A, B sa B, A sa B, isang hindi kilalang hostname, at isang beripikadong account na walang pagiging miyembro. Ang pang-apat at pang-lima ay dapat mabigo nang sarado at hindi kailanman babagsak sa isang default na nangungupahan. Patakbuhin ang parehong matrix sa pasukan ng VPN din, na may isang garapon ng session bawat account:
curl -s -o /dev/null -w '%{http_code}' -b jar.txt https://clinic-b.example.com/records/42
curl -s -o /dev/null -w '%{http_code}' -b jar.txt https://clinic-a.example.com/records/42
Pagkatapos ay baguhin ang isang entry sa listahan ng pinapayagan at patakbuhin muli. Ang resultang gumagalaw ay nangangahulugan na ang isang kontrol sa network ay gumagawa ng desisyon sa awtorisasyon.
Ulitin ang matrix pagkatapos ng anumang pagbabago sa frontend, dahil ang pangalawang landas ng code na lumalaktaw sa pagsusuri ang pinakakaraniwang paraan kung paano nag-e-erode ang hangganang ito. Ang inaasahang resulta ay nakababagot: bawat pasukan ay gumagawa ng parehong mga sagot.