Closed rrandiak closed 9 months ago
Zdravím,
no, ona ta logika je trošku jiná. Standardně Kramerius umožňuje tisknout cokoliv, na co má uživatel práva. Pokud vyhodnotí, že nemá, pak se ve výsledním PDF objeví hláška o nedostupnosti. Vše je řízeno akcí READ, která slouži k přístupu k dokumentům. S příchodem dnnt licencí (tehdy ještě labelů) se objevil usecase, kdy je nutno povolit akci READ ale zároveň zakázat tisk nebo generovani PDF. A to bylo úkolem tohoto pravidla.
FALSE
NOT_APPLICABLE
Ale máte pravdu, že by asi bylo dobré se zbavit jména DNNT v názvu pravidla.
Zdravím,
mohli by ste mi, prosím, poskytnúť odpoveď, prečo mi pomocou toho API callu nejde dané PDF stiahnuť, aj keď máme v Kramériu nastavené
Role | Podmínka | Parametr | Licence | |
---|---|---|---|---|
common_users | PDFDNNTLabels | - | public |
a ten dokument (stránka) má licenciu public.
Chcel by som dodať, že toto nesúvisí s issue https://github.com/ceskaexpedice/kramerius-web-client/issues/649, keďže používam priamo API call, a zároveň podmienka s rolou kramerius_admin funguje
Role | Podmínka | Parametr | Licence | |
---|---|---|---|---|
kramerius_admin | - | - | - |
Zároveň toto sú konkrétne use cases, ktoré by sme chceli týmto vyriešiť: Licencia | Akce Čtení | Akce Pdf a tisk |
---|---|---|
public | všade = Role: common_users | všade = Role: common_users |
public-muo | všade = Role: common_users | nikde |
dnnto | online = Role: uma_authorization | terminály = Role: common_users, Parametr: "IPs Terminálov" |
dnntt | terminály = Role: common_users, Parametr: "IPs Terminálov" + terminály iných knižníc | terminály = Role: common_users, Parametr: "IPs Terminálov" |
onsite | terminály = Role: common_users, Parametr: "IPs Terminálov" | terminály = Role: common_users, Parametr: "IPs Terminálov" |
onsite-sheetmusic | terminály = Role: common_users, Parametr: "IPs Terminálov" | nikde |
Čtení máme nastavené, tak ako je napísané v tejto tabuľke. Chcel by som ešte nastaviť Pdf a tisk podľa tejto tabuľky, a momentálne to neviem nijak docieliť.
Vedeli by ste mi teda nejak poradiť? Alebo sa to celé vyrieší presunutím rozhodovania o tlačení do klienta? Tam ale existuje bezpečnostný problém, že klient sa dá obísť a dajú sa tlačiť a generovať PDF zo stránok, pri ktorých je to v klientovi zakázané.
Ďakujem,
Róbert
@r2it-git Dobrý den.
Problém bude v povolení tisku pro licence dnnto a dnntt, kdy jsou rozdilne IP filtry pro zobrazení a pro generovani PDF. Zde se počítalo s tím, že IP filtr bude nastaven pouze na čtení a podmínka PDFDNNTLabels bude sledovat, zda dílo bylo poskytunto dle licence. Pokud ano, tak PDF zařízne.
Standardně by to nastavení by mělo vypadat nějak tatko:
Zákaz pro konkrétní licence:
Dobrý deň,
môžem potvrdiť, že common_users bez podmínky funguje tak ako ste opísali. Lenže zákaz pre konkrétne licencie pomocou PDFDNNTLabels, nemá žiaden efekt. Momentálne nastavenia vyzerajú takto: Role | Podmínka | Parametr | Licence |
---|---|---|---|
common_users | PDFDNNTLabels | - | public-muo |
common_users | PDFDNNTLabels | - | onsite-sheetmusic |
common_users | - | - | - |
Týmto som dosiahol, že keď nemá užívateľ právo čítať, tak PDF stránky budú nahradené informáciou o nedostupnosti. Avšak aj s podmienkou PDFDNNTLabels na licencií public-muo, je stále možné generovať PDF a tisk pre stránky s public-muo licenciou (nie sú nahradené informáciou o nedostupnosti). V Čtení je pre public-muo len jedna podmienka:
Role | Podmínka | Parametr | Licence |
---|---|---|---|
common_users | Licenses | - | public-muo |
Podobne je to aj s licenciou onsite-sheetmusic.
@r2it-git Zdravím, podmínka PDFDNNTLabels byla nahrazena novou PDFProtectedByLicense. Chování by mělo být stejné jak je výše popsáno.
Skúšané pomocou
curl -H "Content-Type: application/json" -H "Authorization: Bearer $K7_TOKEN" 'https://api.kramerius.mzk.cz/search/api/client/v7.0/pdf/selection?pids=uuid:0e5a18b6-db8b-453e-9e72-7e5d1d2b6af0'
na stránke s public licenciou. Skúšal som to s tokenom, ktorý priradí keycloak môjmu admin účtu. Keď nastavím podmienku pre Pdf a tisk pre rolu kramerius_admin, tak týmto spôsobom som schopný stiahnuť PDF stránky. Keď naopak podmienku pre rolu kramerius_admin vymažem a skúsim podmienku PDFDNNTLabels s licenciou public tak dostanem{"message":"action A_PDF_READ is not allowed, object is uuid:0e5a18b6-db8b-453e-9e72-7e5d1d2b6af0","status":403}
.Nazrel som do kódu Kraméria a z tejto triedy
shared/common/src/main/java/cz/incad/kramerius/security/impl/criteria/PDFDNNTLabels.java
som vyčítal, že vracia buďEvaluatingResultState.NOT_APPLICABLE
aleboEvaluatingResultState.FALSE
. Úplne sa do kódu Kraméria nerozumiem, ale myslím, že to bude ten dôvod.Druhá vec je, že by sme potrebovali nastaviť Pdf a tisk dokumentov pre konkrétnu licenciu a parameter = ipčky. Dôvodom je, že niektoré dokumenty je možné na základe licencie tlačiť v študovňách, ale nikde inde.
A za tretie ešte spomeniem, že pred pár mesiacmi sa menilo názvoslovie filtrov z DNNT na Licence, a tu sa na to asi zabudlo.
Celkovo mi z toho teda vychádza opraviť podmienku PDFDNNTLabels a premenovať na PDFLicenses. A pridať podmienku PDFLicensesIPFiltered. Poprípade, ja osobne nevidím dôvod prečo by sa podmienky Licenses a LicensesIPFiltered nedali rovnako použiť pri akcií Čtení aj akcií Pdf a tisk. Ale je dosť možné, že na to nejaký dôvod je, len o ňom neviem.
Ďakujem,
Róbert Randiak, MZK - OSDD
Edit: otestoval som zmenenie podmienky PDFDNNTLabels na Licences priamo v databáze. A takto vytvorená podmienka s rolou common_users, podmienkou Licenses a licenciou public funguje. Samozrejme, že tam môžu byť iné zádrhle, netestoval som to nejak výrazne. Ale po tejto zmene sa mi podarilo získať dané PDF... Keď tak nad tým romzýšľam, možno tam nejak hrá rolu obmedzenie počtu stránok, preto sa nemôžu použiť rovnaké podmienky..