Završni Projekat: Sistem za e-Upravu

Modul 10 - Lekcija 1

Implementacija Kompleta Web Aplikacije sa CRUD operacijama, Sigurnosnim filterima i DataAnnotations pravilima

⏱️ Trajanje: ~4 časa | 📚 Nivo: Napredni | 🎯 Kruna Kursa

📖 Koncept Finalnog Projekta

U okviru ovog modula student implementira "Od-Nule" cjelokupan informacijski web softwer za registraciju davanja, budžeta i uposlenih u okviru sektora regionalnog ministarstva.

Iskoristiće se SVE tehnologije prelazeći od Modelskih baza naprijed kroz logiku Controllera do šminkanja Views izgleda sa Bootstrap komponentama.

MODELS VIEWS CONTROLL

🏢 Hijerarhija Uloga (Role-Based Access)

Političko-softwerske privilegije preduzeća

  • Administrator (Sistem-Inžinjer): Može kreirati nove Ministre i resetovati lozinke korisnika.
  • Ministar (Direktor regije): Može potvrditi budžete, dodati nove Odjele u svoju diviziju. Odobrava zapošljenja.
  • Službenik (Referent Unosa): Vidi isključivo svoje korisnike. Vraća CRUD preglede Ustanova. Ne vidi dugmice "Izbrisi Budžet".
  • Korisnik (Anonimni Korinsik): Gledaju Javno dostupne Budžetske Odluke na Glavnoj (Home) stranici bez prijavnog ekrana.

🗄️ Implementacija Arhitekture: Faza 1 (Models)

U prvoj liniji koda gradimo Modelski sloj i stroge DataAnnotations restrikcije, spajajući EntityFramework Code-First da skroji tabele nad SQL serverom.

public class Zaposleni 
{
    [Key]
    public int UposlenikId { get; set; }

    [Required(ErrorMessage = "JMBG format je nužan unutar drzavnog aparata!")]
    [StringLength(13, MinimumLength = 13)]
    public string JMBG { get; set; }

    [Required]
    public string ImePrezime { get; set; }
    
    // Spajanje relacija jednih tabela sa drugim
    public int MinistarstvoId { get; set; }
    public virtual Ministarstvo PripadaMinistarstvu { get; set; }
}

⚙️ Arhitektura Servera: Faza 2 (Controllers)

Kreiramo Logiku - Sve što komunicira sa Bazom podataka da izvuče, ili ubaci izmjene (CRUD).

[Authorize(Roles = "Službenik, Ministar")]
public class UposlenikController : Controller 
{
    private ApplicationDbContext db = new ApplicationDbContext();

    // 1. C: CREATE
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult PrijemRadnika(UposlenikNoviViewModel model)
    {
        if (ModelState.IsValid)
        {
            var NRadi = new Zaposleni { ImePrezime = model.ImePrezime, JMBG = model.JmbgUnos };
            db.ZaposleniOdsjek.Add(NRadi);
            db.SaveChanges(); // Fizicko zakljucanje novog zapisa
            return RedirectToAction("Organizacija"); // Usmjeravanje korisnickog Ekrana na Spisak svih
        }
        return View(model); // Vrati ga sa errorima ispod inputa
    }
}

🎨 Izgled App: Faza 3 (Views - Razor TagHelperi)

Za kraj ispisujemo Bootstrap forme. Podatke vučemo iz Model Varijable.

@model eUprava.Models.UposlenikNoviViewModel

<h2>Novi Radnik Registracija</h2>

@using (Html.BeginForm("PrijemRadnika", "Uposlenik"))
{
    @Html.AntiForgeryToken()
    
    <div class="form-group">
        @Html.LabelFor(m => m.ImePrezime)
        @Html.TextBoxFor(m => m.ImePrezime, new { @class = "form-control" })
        @Html.ValidationMessageFor(m => m.ImePrezime, "", new { @class = "text-danger" })
    </div>
    
    <!-- Samo Direktor vidi Dugmad Otkaza! -->
    @if (User.IsInRole("Ministar"))
    {
        <button type="button" class="btn btn-danger">Otpusni Rok</button>
    }
    
    <button type="submit" class="btn btn-primary">Registruj Kadra</button>
}

✅ Zaključak

  • ✅ Kompletna Web Aplikacija zahtjeva harmonijsku saradnju između C# Modelskih relacija, Logičkih uvjeta koje Controller pazi (Authentication Role), te Bootstrap Viewova (HTML-a).
  • ✅ DataAnnotations čine moćno oružje odbrane prve linije kako loši podaci iz korisničkih ruku ne bi došli do same baze i pokvarili format!
  • ✅ Uspješan projekat zahtijeva pažljivo raspoređivanje uloga te skrivanje specifičnih Razor View segmenata User.IsInRole filterom.