Vodiči

Kako dodati kontrolu pristupa zasnovanu na ulogama (RBAC) u aplikaciju

Da biste dodali kontrolu pristupa zasnovanu na ulogama, dajte svakom korisniku jednu ili više uloga (na primer administrator, urednik, posmatrač), definišite koje radnje svaka uloga sme da obavlja i proveravajte te dozvole na serveru za svaki zahtev — ne samo sakrivanjem dugmadi. Takođe proverite da zapis kojem se pristupa pripada nalogu ili timu korisnika. Počnite sa nekoliko fiksnih uloga u bazi i testirajte pokušajem da direktno dođete do tuđih podataka.

Autentifikacija i autorizacija

Dve reči koje se često mešaju:

  • Autentifikacija je ko si ti? — prijava. Pogledajte kako dodati prijavu u aplikaciju.
  • Autorizacija je šta smeš da radiš? — koje stranice, zapise i radnje prijavljeni korisnik može da dohvati.

RBAC je najčešći način autorizacije. Važno je: od septembra 2026, Broken Access Control je na prvom mestu u OWASP Top 10:2025, široko korišćenoj listi najozbiljnijih bezbednosnih rizika web aplikacija. Tipični propusti su korisnici koji čitaju tuđe zapise menjajući ID u URL-u ili obični korisnici koji pozivaju API rute namenjene samo administratorima.

Izaberite model

ModelKako radiDobro zaKompromis
Jedna kolona za uloguusers.role = admin / memberMale aplikacije sa dve ili tri ulogePostaje nered kada ljudima trebaju različite uloge na različitim mestima
Uloge + dozvoleUloge se preslikavaju na imenovane dozvole (invoices.approve); kod proverava dozvoleAplikacije čija će pravila rastiViše tabela; lista dozvola za održavanje
Uloge po timu (multi-tenant)Tabela članstva: korisnik + organizacija + ulogaSaaS gde ljudi pripadaju timovima ili radnim prostorimaSvaki upit mora biti ograničen na organizaciju
Zasnovano na atributima ili odnosimaPravila o atributima zapisa („autor može da menja svoj post”) ili o odnosima (deljeno sa)Dokumenti, deljenje, složeni tokovi radaTeže za razumevanje; razmislite o posebnoj biblioteci ili servisu
Uloge od provajdera za prijavuVaš provajder za prijavu čuva uloge ili članstva u organizacijamaAplikacije koje već koriste hostovani provajder autentifikacijeVezano za tog provajdera; i dalje sprovodite na svom serveru

U praksi, većina aplikacija kombinuje dve stvari: uloge za to kakve radnje neko može da preduzme i vlasništvo za to nad kojim zapisima ih može preduzeti. „Urednici mogu da menjaju postove” je pravilo uloge; „…postove u svom radnom prostoru” je pravilo vlasništva. Potrebna su vam oba.

Počnite jednostavnije nego što mislite. Administrator, član i posmatrač pokrivaju iznenađujuće mnogo aplikacija. Lakše je kasnije podeliti jednu ulogu nego raspetljati deset uloga koje niko ne razume.

Osmislite uloge pre pisanja koda

Najpre napišite tabelu dozvola običnim jezikom. Ona služi i kao specifikacija za AI i kao plan testiranja:

RadnjaVlasnikAdministratorČlanPosmatrač
Pregled projekata u timu✓✓✓✓
Kreiranje i izmena projekata✓✓✓
Brisanje projekata✓✓
Pozivanje i uklanjanje ljudi✓✓
Promena uloga✓
Naplata✓

Odlučite i granične slučajeve: može li poslednji vlasnik da napusti tim? Može li administrator da ukloni vlasnika? Šta uklonjeni korisnik vidi?

Korak po korak

1. Prvo imajte ispravnu prijavu

RBAC leži na vrhu autentifikacije. Server mora pouzdano da zna ko šalje svaki zahtev, iz sesije ili proverenog tokena — nikada iz ID-ja korisnika koji pregledač pošalje u telu zahteva.

2. Čuvajte uloge u bazi

Za aplikaciju jednog tima, kolona role na korisnicima je dovoljna. Za timove, koristite tabelu članstva:

create table memberships (
  user_id uuid references users(id),
  organization_id uuid references organizations(id),
  role text not null check (role in ('owner','admin','member','viewer')),
  primary key (user_id, organization_id)
);

Nikada ne dozvolite korisnicima da sami postave svoju ulogu kroz običnu izmenu profila. Promene uloga idu kroz posebnu krajnju tačku sa proverom dozvola.

3. Proveravajte dozvole na serveru, na jednom mestu

Napišite jednu pomoćnu funkciju — nešto kao can(user, 'projects.delete', project) — i pozovite je u svakoj API ruti, serverskoj akciji i pozadinskom zadatku koji čita ili menja podatke. Jedna centralna funkcija se lakše pregleda i testira nego provere raštrkane po kodu. Podrazumevano odbijajte: ako nijedno pravilo ne dozvoljava radnju, ona se odbija.

4. Ograničite svaki upit

Svaki upit za podatke tima treba da uključuje tim: where organization_id = :currentOrg, a ne samo where id = :id. Ovo sprečava da neko promeni /projects/123 u /projects/124 i vidi tuđi projekat druge kompanije. Za zapise iz drugih timova vraćajte „nije pronađeno” umesto „zabranjeno”, da ne biste otkrili da postoje.

5. Dodajte zaštitu na nivou baze tamo gde je bitna

Postgres row-level security (RLS) omogućava bazi da sprovodi koje redove svaki korisnik može da vidi. Ključna je ako pregledač direktno komunicira sa bazom (kao kod nekih hostovanih backend-a), a inače je koristan drugi sloj za osetljive tabele.

6. Odrazite uloge u interfejsu

Sada sakrijte ili onemogućite ono što korisnici ne smeju da rade, da aplikacija ne bude zbunjujuća. Ovo služi samo upotrebljivosti; zaštitu obavljaju provere na serveru.

7. Beležite osetljive radnje

Zapisujte ko je menjao uloge, brisao podatke ili izvozio zapise i kada. Zapisnik revizije pomaže kod pitanja podrške i incidenata.

8. Testirajte kao napadač

Prijavite se kao svaka uloga i isprobajte svaku radnju iz tabele dozvola. Zatim isprobajte ono što ne bi trebalo da radi: pozovite administrativne API rute kao posmatrač, menjajte ID-jeve u URL-ovima i zahtevima, uklonite sebe kao poslednjeg vlasnika. Automatizovani testovi za tabelu dozvola vredi napisati kada se pravila ustale.

Prompt-ovi koji rade

Dodajte kontrolu pristupa zasnovanu na ulogama. Uloge po organizaciji: owner, admin, member, viewer, sačuvane u tabeli memberships. Dozvole su u ovoj tabeli: [nalepite svoju tabelu]. Napravite jednu serversku funkciju can(user, action, resource), podrazumevano odbijanje, i koristite je u svakoj API ruti. Ograničite svaki upit sa organization_id. Sakrijte u interfejsu radnje koje korisnik ne može da obavi, ali se za bezbednost nikada ne oslanjajte na to.

Pregledajte svaku API rutu i serversku funkciju u ovoj aplikaciji. Za svaku navedite koje podatke čita ili menja, da li proverava da je korisnik prijavljen, da li proverava njegovu ulogu i da li ograničava upit na njegovu organizaciju. Ispravite sve kojima nedostaje provera i pokažite mi listu.

Dodajte stranicu /admin samo za vlasnika, na kojoj vlasnik može da menja uloge članova. Sprečite uklanjanje ili degradiranje poslednjeg vlasnika, beležite svaku promenu uloge sa tim ko ju je napravio i kada, i neka krajnja tačka za promenu uloge odbije svakoga ko nije vlasnik.

Česte greške

  • Provera uloga samo u front endu. API je i dalje otvoren za svakoga ko ga pozove.
  • Veranje ID-jevima iz klijenta — userId ili role u telu zahteva umesto iz sesije.
  • Upiti bez ograničenja koji dohvataju samo po ID-ju zapisa.
  • Uloge proverene na stranicama, ali ne na API rutama, izvozima, preuzimanjima fajlova ili webhook-ovima.
  • Administrator po adresi emaila tvrdo kodiran u kodu (if email === 'me@...'), što se lako zaboravi i teško menja.
  • Previše uloga prerano, koje niko ne može da objasni posle šest meseci.
  • Zastarele sesije: degradirani korisnik zadržava administratorska prava dok se ne odjavi. Proveravajte uloge iz baze, ili ih osvežavajte, za osetljive radnje.

Kontrolna lista za RBAC

  • Tabela dozvola napisana običnim jezikom, granični slučajevi odlučeni
  • Server zna korisnika iz sesije, nikada iz podataka zahteva
  • Uloge sačuvane u bazi; korisnici ne mogu sami da ih menjaju
  • Jedna centralna provera dozvola, podrazumevano odbijanje, korišćena u svakoj ruti
  • Svaki upit ograničen na korisnikovu organizaciju ili vlasništvo
  • Row-level security tamo gde pregledač može da dođe do baze
  • Interfejs sakriva ono što korisnici ne mogu da rade (samo radi upotrebljivosti)
  • Osetljive radnje se beleže
  • Svaka uloga testirana, uključujući direktne API pozive i promenjene ID-jeve

Kontrola pristupa je jedna stavka na dužoj listi; kontrolna lista bezbednosti za aplikacije napravljene AI-jem pokriva ostalo. Ako pravite alat za sopstveno osoblje, kako napraviti interni alat pokazuje gde se uklapaju uloge.

RBAC na Mythexu

Mythex ne pruža ugrađeni sistem prijave ili uloga za korisnike vaše aplikacije. Vi birate biblioteku ili provajdera za autentifikaciju i opisujete uloge, a agent ih povezuje u vaš kod i u Postgres bazu vašeg projekta (dodavanje prijave u aplikaciju). Mythex-ove sopstvene uloge u radnom prostoru, kao što su Owner i Member, kontrolišu ko može da menja vaše Mythex projekte, a ne ko može da koristi objavljenu aplikaciju. Koristite Plan mode da se dogovorite o tabeli dozvola pre gradnje, zatim koristite prompt za pregled iznad i testirajte svaku ulogu u Preview-u pre objavljivanja. Bezbednosni prompt-ovi iz dokumentacije su koristan sledeći korak.

Pitanja

Šta je kontrola pristupa zasnovana na ulogama?

Kontrola pristupa zasnovana na ulogama (RBAC) određuje šta svaki korisnik može da radi na osnovu uloga koje ima, na primer administrator, urednik ili posmatrač. Dozvole se vezuju za uloge, a ne za pojedinačne ljude, pa promena onoga što neko može da radi znači promenu njegove uloge.

Koja je razlika između autentifikacije i autorizacije?

Autentifikacija proverava ko je neko, obično prijavom. Autorizacija određuje šta ta prijavljena osoba sme da vidi i radi. RBAC je jedan od načina autorizacije.

Da li je sakrivanje dugmadi u interfejsu dovoljno za ograničavanje pristupa?

Nije. Bilo ko može direktno da poziva vaš API, pa sakrivanje dugmeta menja samo ono što ljudi vide. Svaki zahtev koji čita ili menja podatke mora da se proveri na serveru prema ulozi korisnika i vlasništvu nad zapisom.

Da li treba da koristim row-level security u Postgresu?

Row-level security omogućava da sama baza podataka određuje koje redove svaki korisnik sme da čita ili menja, što je snažna sigurnosna mreža, posebno kada front end direktno komunicira sa bazom. To dodaje složenost, pa mnoge aplikacije sprovode dozvole u serverskom kodu, a row-level security koriste kao dodatni sloj za osetljive tabele.

Mythex · Pricing · Pravite bilo šta uz AI · Šabloni za sajtove i aplikacije · Mythex u poređenju · Rečnik pojmova za pravljenje aplikacija uz AI · Besplatni alati za pravljenje aplikacija uz AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)