Test: Difference between revisions
No edit summary |
No edit summary |
||
| Line 56: | Line 56: | ||
{| | {| class="mst mst-siva" | ||
|- | |- | ||
! Akter | |||
! Uloga | |||
! Odgovornosti | |||
|- | |- | ||
|| Super Admin | || Super Admin | ||
|| CSA | || CSA | ||
|| Kreiranje grupa, dodela firmi, upravljanje svim korisnicima. | || Kreiranje grupa, dodela firmi, upravljanje svim korisnicima. | ||
|- | |- | ||
|| Group Admin | || Group Admin | ||
|| CGA | || CGA | ||
|| Upravljanje korisnicima unutar dodeljenih grupa. | || Upravljanje korisnicima unutar dodeljenih grupa. | ||
|- | |- | ||
|| End User | || End User | ||
|| USER | || USER | ||
| Line 84: | Line 84: | ||
= 3. Uloge korisnika i dozvole = | = 3. Uloge korisnika i dozvole = | ||
| Line 104: | Line 90: | ||
{| | {| class="mst mst-siva" | ||
|- | |- | ||
! Funkcija | |||
! CSA | |||
! CGA | |||
! USER | |||
|- | |- | ||
|| Kreiranje grupe | || Kreiranje grupe | ||
|| ✓ | || ✓ | ||
|| - | || - | ||
|| - | || - | ||
|- | |- | ||
|| Dodela firme grupi | || Dodela firme grupi | ||
|| ✓ | || ✓ | ||
|| - | || - | ||
|| - | || - | ||
|- | |- | ||
|| Kreiranje korisnika | || Kreiranje korisnika | ||
|| ✓ | || ✓ | ||
|| ✓* | || ✓* | ||
|| - | || - | ||
|- | |- | ||
|| Pristup firmi | || Pristup firmi | ||
|| ✓ | || ✓ | ||
|| ✓ | || ✓ | ||
|| ✓ | || ✓ | ||
|- | |- | ||
|| Upravljanje grupama | || Upravljanje grupama | ||
|| ✓ | || ✓ | ||
|| - | || - | ||
|| - | || - | ||
|- | |- | ||
|| Masovno kreiranje korisnika | || Masovno kreiranje korisnika | ||
|| ✓ | || ✓ | ||
|| ✓ | || ✓ | ||
|| - | || - | ||
|- | |- | ||
|| CSV import korisnika | || CSV import korisnika | ||
|| ✓ | || ✓ | ||
|| ✓ | || ✓ | ||
|| - | || - | ||
|- | |- | ||
|| Mapiranje korisnika na tenant | || Mapiranje korisnika na tenant | ||
|| ✓ | || ✓ | ||
|| ✓ | || ✓ | ||
|| - | || - | ||
|- | |- | ||
|| Pristup arhivi | || Pristup arhivi | ||
|| - | || - | ||
| Line 419: | Line 405: | ||
{| | {| class="mst mst-siva" | ||
|- | |- | ||
! ID | |||
! Naziv | |||
! Opis | |||
|- | |- | ||
|| BR-001 | || BR-001 | ||
|| Kompleksnost lozinke | || Kompleksnost lozinke | ||
|| Min 8 karaktera, 1 veliko slovo, 1 malo slovo, 1 broj (specijalni karakteri opciono). | || Min 8 karaktera, 1 veliko slovo, 1 malo slovo, 1 broj (specijalni karakteri opciono). | ||
|- | |- | ||
|| BR-002 | || BR-002 | ||
|| Zaključavanje naloga | || Zaključavanje naloga | ||
|| Zaključavanje nakon 5 neuspešnih pokušaja. | || Zaključavanje nakon 5 neuspešnih pokušaja. | ||
|- | |- | ||
|| BR-003 | || BR-003 | ||
|| Važnost tokena | || Važnost tokena | ||
|| Cluster token 24h, Firm token 8h, Refresh token 7 dana. | || Cluster token 24h, Firm token 8h, Refresh token 7 dana. | ||
|- | |- | ||
|| BR-004 | || BR-004 | ||
|| Format korisničkog imena | || Format korisničkog imena | ||
|| {prefix}.{username} (npr. bjn.petar_petrovic). | || {prefix}.{username} (npr. bjn.petar_petrovic). | ||
|- | |- | ||
|| BR-005 | || BR-005 | ||
|| Prefix logika | || Prefix logika | ||
Revision as of 11:53, 19 November 2025
1. Uvod
1.1 Svrha dokumenta
Ovaj dokument definiše funkcionalne zahteve za Balans 5 CBA (Cluster Based Authentication) sistem - centralizovan sistem za autentifikaciju i autorizaciju za multi-tenant sistem.
1.2 Opseg
CBA (Cluster Based Authentication) je centralizovani sistem za autentifikaciju i autorizaciju za multi-tenant ERP sistem Balans5. Sistem omogućava korisnicima da pristupe više firmi sa jednim setom kredencijala, umesto da imaju odvojen nalog u svakoj firmi.
1.3 Definicije
- CSA - Cluster Super Admin (Super Administrator klastera)
- CGA - Cluster Group Admin (Administrator grupe)
- USER - Redovan korisnik sistema
- Firma - Pojedinačna kompanija/tenant u sistemu
- Grupa - Kolekcija firmi koje pripadaju istom klasteru
- Prefix - Prefiks za korisničko ime koji se automatski dodaje na osnovu grupe (npr. bjn.petar_petrovic)
- Cluster Token - JWT token koji se generiše nakon login-a (24h važnosti)
- Firm Token - JWT token koji se generiše nakon izbora firme (8h važnosti)
- Refresh Token - Token za obnavljanje access tokena (7 dana važnosti)
1.4 Glavne karakteristike
- Jedan nalog za više firmi
- Grupa-baziran pristup (korisnici → grupe → firme)
- Centralizovano upravljanje korisnicima
- JWT token-based autentifikacija
- Multi-tenant izolacija podataka
2. Pregled sistema
2.1 Arhitektura sistema
Sistem se sastoji od tri glavna sloja:* Autentifikacioni sloj - JWT token-based autentifikacija sa refresh token mehanizmom.
- Autorizacioni sloj - Role-based access control (RBAC) sa grupama.
- Tenant sloj - Izolacija podataka po firmama.
2.2 Akteri sistema
| Akter | Uloga | Odgovornosti |
|---|---|---|
| Super Admin | CSA | Kreiranje grupa, dodela firmi, upravljanje svim korisnicima. |
| Group Admin | CGA | Upravljanje korisnicima unutar dodeljenih grupa. |
| End User | USER | Pristup dodeljenim firmama, izvršavanje poslovnih operacija.
|
2.3 Token sistem
Sistem koristi tri tipa tokena:* Cluster Token (24 sata) - generiše se nakon uspešnog login-a i sadrži listu dostupnih firmi.
- Firm Token (8 sati) - generiše se nakon izbora firme i sadrži informacije o firmi i profilu.
- Refresh Token (7 dana) - koristi se za obnavljanje access tokena bez ponovnog login-a.
3. Uloge korisnika i dozvole
3.1 Matrica dozvola
| Funkcija | CSA | CGA | USER |
|---|---|---|---|
| Kreiranje grupe | ✓ | - | - |
| Dodela firme grupi | ✓ | - | - |
| Kreiranje korisnika | ✓ | ✓* | - |
| Pristup firmi | ✓ | ✓ | ✓ |
| Upravljanje grupama | ✓ | - | - |
| Masovno kreiranje korisnika | ✓ | ✓ | - |
| CSV import korisnika | ✓ | ✓ | - |
| Mapiranje korisnika na tenant | ✓ | ✓ | - |
| Pristup arhivi | - | - | ✓** |
*CGA može kreirati samo USER naloge unutar svojih grupa.
**USER može pristupiti arhivi samo svojih firmi.
3.2 Ograničenja po ulogama
- CSA: Ima pristup svim grupama, firmama i korisnicima.
- CGA: Može upravljati samo korisnicima u svojim dodeljenim grupama.
- USER: Može pristupiti samo firmama koje su dodeljene njegovim grupama.
4. Funkcionalni zahtevi
4.1 Modul autentifikacije
4.1.1 Login korisnika
- REQ-1: Sistem MORA obezbediti login ekran sa poljima za korisničko ime i lozinku.
- REQ-2: Sistem MORA validirati kredencijale koristeći centralnu CBA bazu podataka.
- REQ-3: Sistem MORA zaključati nalog nakon 5 neuspešnih pokušaja login-a.
- REQ-4: Sistem MORA generisati cluster_token (24h) ili firm_token (8h) nakon uspešnog login-a.
- REQ-5: Sistem MORA logovati sve uspesne pokušaje login-a (vreme, IP, rezultat).
- REQ-6: Sistem MORA automatski selektovati firmu ako korisnik ima pristup samo jednoj firmi.
Ulaz:* Korisničko ime (string, obavezno, min 3 karaktera).
- Lozinka (string, obavezno, min 8 karaktera).
Izlaz:* Uspeh: JWT token + korisnički profil + dostupne firme (ili automatski izabrana firma).
- Neuspeh: Error kod + poruka.
Poslovna pravila:* BR-001: Lozinka mora sadržati velika slova, mala slova, broj (specijalni karakteri opciono).
- BR-002: Neaktivni nalozi ne mogu da se uloguju.
- BR-003: Zaključani nalozi ne mogu da se uloguju dok se ne otključaju.
4.1.2 Izbor firme
- REQ-7: Sistem MORA prikazati listu dostupnih firmi nakon login-a (ako korisnik ima pristup više firmi).
- REQ-8: Sistem MORA automatski selektovati firmu ako korisnik ima pristup samo jednoj.
- REQ-9: Sistem MORA generisati firm_token (8h) nakon izbora firme.
- REQ-10: Sistem MORA učitati firm-specifični profil i dozvole nakon izbora firme.
- REQ-11: Sistem MORA obezbediti endpoint za obnavljanje access tokena.
- REQ-12: Sistem MORA rotirati refresh token pri svakom refresh-u.
- REQ-13: Refresh token MORA biti važeći 7 dana.
- REQ-14: Sistem MORA validirati refresh token pre obnavljanja access tokena.
4.1.4 Logout
- REQ-15: Sistem MORA obezbediti logout funkcionalnost koja revokuje sesiju.
- REQ-16: Sistem MORA invalidirati refresh token nakon logout-a.
4.2 Modul upravljanja korisnicima
4.2.1 Kreiranje korisnika
- REQ-17: Sistem MORA obezbediti formu sa obaveznim poljima: korisničko ime, email, lozinka, uloga.
- REQ-18: Sistem MORA validirati format email-a i jedinstvenost.
- REQ-19: Sistem MORA automatski dodati prefix korisničkom imenu na osnovu grupe.
- REQ-20: Sistem MORA omogućiti CGA-u eksplicitni izbor grupe za prefix ako korisnik pripada više grupa.
- REQ-21: Sistem MORA automatski koristiti prefix iz prve grupe ako nije eksplicitno izabran.
Ulaz:* Korisničko ime (bez prefiksa).
- Email.
- Lozinka (ili generisana privremena).
- Uloga (CSA, CGA, USER).
- Lista grupa (groupIds).
- Grupa za prefix (prefixGroupId) - opciono.
Izlaz:* Kreiran korisnik sa prefiksom u korisničkom imenu.
- Dodeljene grupe.
- Status kreiranja.
4.2.2 Masovno kreiranje korisnika
- REQ-24: Sistem MORA prihvatiti CSV fajl sa podacima korisnika.
- REQ-25: Sistem MORA validirati sve zapise pre obrade.
- REQ-26: Sistem MORA kreirati maksimalno 100 korisnika po batch-u. (transakcija application.properties cba.bulk.timeout-seconds=300 / cba.bulk.batch-size=100 )
- REQ-27: Sistem MORA generisati izveštaj sa uspehom/neuspehom za svaki zapis.
- REQ-28: Sistem MORA rollback-ovati ceo batch u slučaju kritične greške (all-or-nothing).
- Ako bilo koji korisnik ne prođe validaciju ili procesiranje, cela transakcija se rollback-uje
- Sve greške se prikazuju sa pozicijama korisnika
- Format greške: "Greška na poziciji #X (korisnik 'username'): detaljna poruka"
* REQ-29: Sistem MORA omogućiti eksplicitni izbor grupe za prefix u bulk operacijama.
- REQ-30: Sistem MORA podržati različite profile po firmama za istog korisnika (profilePerFirm).
CSV Format:* Email (obavezno).
- Username (obavezno, bez prefiksa).
- GroupId (obavezno).
- ProfilePerFirm (JSON mapa: {"firmId": profileId}).
4.2.3 Upravljanje korisnicima
- REQ-31: Sistem MORA omogućiti pregled svih korisnika (CSA vidi sve, CGA vidi samo svoje grupe).
- REQ-32: Sistem MORA omogućiti ažuriranje korisničkih podataka.
- REQ-33: Sistem MORA omogućiti otključavanje zaključanih naloga.
- REQ-34: Sistem MORA omogućiti reset lozinke.
- REQ-35: Sistem MORA omogućiti deaktivaciju korisnika.
4.3 Modul upravljanja grupama
4.3.1 Kreiranje grupe
- REQ-36: Sistem MORA omogućiti kreiranje grupe sa nazivom i prefixom za korisničko ime.
- REQ-37: Sistem proverava jedinstvenost prefiksa. Ako prefix već postoji, sistem vraća grešku i sprečava kreiranje grupe. Na nivou clustera postoji UNIQUE constraint koji garantuje jedinstvenost.
- REQ-38: Sistem automatski kreira posebnu grupu sa nazivom "ALL" koja sadrži sve korisnike iz firmi koje su joj dodeljene. Ova grupa se kreira pri inicijalizaciji sistema ili kada se prva firma dodeli ovoj grupi. "ALL" grupa nema prefix jer se koristi samo za organizaciju korisnika.
- REQ-39: Sistem sinhronizuje "ALL" grupu hibridnim pristupom:
- Instant Sync: Automatski se pokreće kada se firma dodeli "ALL" grupi ili kada se korisnici kreiraju/ažuriraju
- Scheduled Job: Izvršava se automatski svakih 6 sati kao backup/cleanup mehanizam
Ulaz:* Naziv grupe.
- Prefix za korisničko ime (2-20 karaktera, lowercase alphanumeric).
- Opis (opciono).
Izlaz:* Kreirana grupa sa ID-jem.
4.3.2 Dodela firmi grupi
- REQ-40: Sistem MORA omogućiti dodelu firme grupi.
- REQ-41: Sistem MORA omogućiti uklanjanje firme iz grupe.
- REQ-42: Sistem MORA omogućiti bulk dodelu firmi grupi.
- REQ-43: Sistem MORA logovati ko je dodelio firmu grupi i kada.
4.3.3 Dodela korisnika grupi
- REQ-44: Sistem MORA omogućiti dodelu korisnika grupi (M:N veza).
- REQ-45: Sistem MORA omogućiti uklanjanje korisnika iz grupe.
- REQ-46: Sistem MORA omogućiti bulk dodelu korisnika grupama.
- REQ-47: Sistem MORA logovati ko je dodelio korisnika grupi i kada.
4.4 Modul mapiranja korisnika
4.4.1 Mapiranje na tenant
- REQ-48: Sistem MORA omogućiti mapiranje CBA korisnika na tenant korisnika (korid, profile_id).
- REQ-49: Sistem MORA omogućiti bulk mapiranje korisnika.
- REQ-50: Sistem MORA omogućiti automatsko mapiranje na osnovu email-a ili korisničkog imena.
- REQ-51: Sistem MORA prikazati nemapirane korisnike.
- REQ-52: Sistem MORA omogućiti različite profile po firmama za istog korisnika.
5. Korisničke priče
5.1 Autentifikacione priče
US-001: Osnovni Login
Kao USER, želim da se ulogujem sa jednim setom kredencijala, tako da mogu pristupiti svim dodeljenim firmama bez više lozinki.
* Login stranica prikazuje polja za korisničko ime i lozinku.
- Uspešan login preusmerava na izbor firme (više firmi) ili direktno u firmu (jedna firma).
- Neuspešan login prikazuje specifičnu poruku o grešci.
- Nalog se zaključava nakon 5 neuspešnih pokušaja.
US-002: Automatski izbor firme
Kao USER sa pristupom samo jednoj firmi, želim da budem automatski ulogovan u tu firmu, tako da ne moram da prolazim kroz dodatni korak izbora.
Kao USER, želim da moja sesija bude automatski obnovljena bez ponovnog login-a, tako da ne gubim radni tok.
5.2 Admin priče
US-004: Masovno kreiranje korisnika
Kao CGA, želim da kreiram više korisnika odjednom, tako da mogu efikasno da onboardujem nove timove.
US-005: Izbor prefiksa za korisničko ime
Kao CGA sa više grupa, želim da eksplicitno izaberem iz koje grupe želim prefix za korisničko ime, da imam kontrolu nad generisanim korisničkim imenima.
US-006: Različiti profili po firmama
Kao CGA, želim da dodelim različite profile korisniku u različitim firmama, tako da korisnik ima različite dozvole u različitim firmama.
6. Scenariji korišćenja
UC-001: Tok login-a
Primarni akter: End User.
Preduslovi: Korisnik ima aktivan nalog.
Postuslovi: Korisnik je autentifikovan i ima važeći access token.
Glavni tok:# Korisnik otvara login stranicu i unosi korisničko ime i lozinku.
- Sistem validira kredencijale i status naloga.
- Sistem generiše odgovarajući token (cluster_token ili firm_token).
- Sistem vraća token i listu firmi (ili automatski izabranu firmu).
UC-002: Kreiranje korisnika sa prefix grupom
Primarni akter: CGA.
CGA unosi podatke, bira jednu ili više grupa i opciono bira grupu za prefix; sistem dodaje prefix, kreira korisnika i dodeljuje ga grupama.
UC-003: CSV import korisnika
CGA upload-uje CSV fajl, sistem validira zapise, kreira korisnike u transakciji i generiše izveštaj. U slučaju greške radi se rollback.
7. Poslovna pravila
7.1 Autentifikaciona pravila
| ID | Naziv | Opis |
|---|---|---|
| BR-001 | Kompleksnost lozinke | Min 8 karaktera, 1 veliko slovo, 1 malo slovo, 1 broj (specijalni karakteri opciono). |
| BR-002 | Zaključavanje naloga | Zaključavanje nakon 5 neuspešnih pokušaja. |
| BR-003 | Važnost tokena | Cluster token 24h, Firm token 8h, Refresh token 7 dana. |
| BR-004 | Format korisničkog imena | {prefix}.{username} (npr. bjn.petar_petrovic). |
| BR-005 | Prefix logika | Ako je prosleđen prefixGroupId koristi se taj prefix, inače prefix prve grupe u listi. |
7.2 Pravila za grupe
| ID | Naziv | Opis |
| BR-006 | Jedinstvenost prefiksa | Svaka grupa mora imati jedinstven prefix. |
| BR-007 | ALL grupa | Sistem automatski kreira ALL grupu koja sadrži sve korisnike. |
| BR-008 | Sinhronizacija ALL grupe | ALL grupa se automatski sinhronizuje hibridnim pristupom: instant sync pri dodeli firme/kreiranju korisnika + scheduled job svakih 6 sati.
|
7.3 Pravila za korisnike
| ID | Naziv | Opis |
| BR-009 | Ograničenje CGA | CGA može kreirati samo USER naloge unutar svojih grupa. |
| BR-010 | Bulk operacije | Maksimalno 100 korisnika po batch-u. |
| BR-011 | Transakcijski pristup | CSV import je all-or-nothing (sve ili ništa). |
| BR-012 | Različiti profili | Korisnik može imati različite profile u različitim firmama. |
8. Zahtevi za podatke
8.1 Podaci o korisniku
| Polje | Tip | Obavezno | Validacija |
| acc_id | UUID | Da | Auto-generisan, jedinstven. |
| username | VARCHAR(50) | Da | Jedinstven, format: prefix.name. |
| VARCHAR(100) | Da | Validan email format. | |
| password_hash | VARCHAR(255) | Da | Bcrypt hash. |
| role_type | ENUM | Da | CSA (2), CGA (1), USER (0). |
| status | INTEGER | Da | 0=active, 1=inactive, 2=locked, 3=suspended. |
| failed_attempts | SMALLINT | Ne | Brojač neuspešnih pokušaja. |
| created_at | TIMESTAMP | Da | Vremenska oznaka kreiranja. |
| created_by | UUID | Ne | ID korisnika koji je kreirao.
|
8.2 Podaci o grupi
| Polje | Tip | Obavezno | Validacija |
| group_id | BIGINT | Da | Auto-generisan, jedinstven. |
| name | VARCHAR(100) | Da | Jedinstven naziv. |
| username_prefix | VARCHAR(20) | Ne | 2-20 lowercase alphanumeric. |
| active | BOOLEAN | Da | Status aktivnosti. |
| description | TEXT | Ne | Opis grupe.
|
8.3 Junction tabele
cba_user_groups (Korisnik ↔ Grupa):* acc_id (UUID) - Referenca na korisnika.
- group_id (BIGINT) - Referenca na grupu.
- assigned_at (TIMESTAMP) - Vreme dodele.
- assigned_by (UUID) - Ko je dodelio.
cba_group_firms (Grupa ↔ Firma):* group_id (BIGINT) - Referenca na grupu.
- firid (BIGINT) - Referenca na firmu.
- assigned_at (TIMESTAMP) - Vreme dodele.
- assigned_by (UUID) - Ko je dodelio.