Prava plati za firmu, ne za cloveka

permissionsOf(user) scitalo role pres vsechna clenstvi, takze kdo byl
spravce v jedne firme, jednal jako spravce ve vsech, kam patril. Uzivatel
ve dvou firmach je vzacny, dusledek ne.

- firma je povinny argument u permissionsOf, hasPermission i hasAnyPermission.
  Zamerne povinny: kdyby byl nepovinny, prvni volani bez nej by tise vratilo
  vsechna prava. Prekladac tim rovnou nasel vsech ctrnact mist, ktera se ptaji.
- kazde misto se pta za tu spravnou firmu: akce nad ticketem za firmu toho
  ticketu, uprava zaznamu za firmu toho zaznamu, zalozky a helpdesk za firmu,
  kterou ma clovek prepnutou
- cizi firemni role se ignoruje, i kdyby na ni clenstvi odkazovalo. Jinak by
  stacilo pripsat si ji do clenstvi v jine firme a prava by se prenesla.
- cache prav ma v klici firmu
- readScope cte z jedne firmy, te prepnute, ne ze vsech. V nastaveni se driv
  michaly typy ticketu a role napric firmami bez ohledu na vyber.

Opraveno u toho: systemove role se pri startu srovnaji s kodem
(syncSystemRoles). Vychozi sada se pouzije jen do prazdneho uloziste, takze
nove pravo v katalogu se k uz bezici instalaci nikdy nedostalo - ticket.create
ani obe prava helpdesku by spravci firmy nenabehla a zalozka Helpdesk by se
neobjevila. Meni se jen prava, jen u nasich roli, nazvu se to netyka.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
JiriUhlir
2026-08-26 07:57:01 +02:00
co-authored by Claude Opus 5
parent 2329ccbdc1
commit 2e0b9456a9
11 changed files with 254 additions and 49 deletions
+31
View File
@@ -2,6 +2,37 @@
Nejnovejsi nahore.
## 2026-08-26 - prava plati za firmu, ne za cloveka
`permissionsOf(user)` scitalo role pres vsechna clenstvi. Kdo byl spravce
v jedne firme, jednal jako spravce ve vsech, kam patril. Uzivatel ve dvou
firmach je vzacny, dusledek ne - to neni edge case, to je diera v pravech.
### Zmeneno
- **Firma je povinny argument** u `permissionsOf`, `hasPermission`
i `hasAnyPermission`. Zamerne povinny: kdyby byl nepovinny, prvni volani bez
nej by tise vratilo vsechna prava. Prekladac tim rovnou nasel vsech ctrnact
mist, ktera se ptaji.
- **Kazde misto se pta za tu spravnou firmu.** Akce nad ticketem za firmu toho
ticketu, uprava zaznamu za firmu toho zaznamu, zalozky a helpdesk za firmu,
kterou ma clovek prepnutou. Kdo edituje zaznam jine firmy, musi mit pravo tam,
ne tam, kde je zrovna prepnuty.
- **Cizi firemni role se ignoruje**, i kdyby na ni clenstvi odkazovalo. Jinak by
stacilo pripsat si ji do clenstvi v jine firme a prava by se prenesla.
- **Cache prav ma v klici firmu.** Bez toho by prvni dotaz odpovedel i na druhou.
- **`readScope` cte z jedne firmy, te prepnute**, ne ze vsech, kam clovek patri.
V nastaveni se driv michaly typy ticketu a role napric firmami bez ohledu na
vyber - stejna vada jako u prepinace, jen na jinem miste.
### Opraveno
- **Systemove role se pri startu srovnaji s kodem** (`syncSystemRoles`).
Vychozi sada se pouzije jen do prazdneho uloziste, takze nove pravo
v katalogu se k uz bezici instalaci nikdy nedostalo - `ticket.create`
a obe prava helpdesku by spravci firmy nikdy nenabehla a zalozka by se
neobjevila. Meni se jen prava, jen u nasich roli, nazvu se to netyka.
## 2026-08-26 - prepinac firmy plati pro cely portal
Prepinac byl stav uvnitr stranky Prehled. Prepnuti na LogiTrans zmenilo prehled