\section{Autorizáció}

\begin{frame}{Mi az autorizáció?}
  \begin{block}{Definíció}
    Meghatározza, hogy egy azonosított felhasználó milyen erőforrásokhoz férhet hozzá és milyen műveleteket végezhet.
  \end{block}
  
  \begin{itemize}
    \item \textbf{Kérdés:} Mit tehetsz?
    \item \textbf{Cél:} Jogosultságok szabályozása
    \item \textbf{Eredmény:} Engedélyezett vagy tiltott művelet
  \end{itemize}
  
  \begin{alertblock}{Fontos!}
    Autorizáció az authentikáció után történik.
  \end{alertblock}
\end{frame}

\begin{frame}{Autorizációs modelljei}
  \begin{enumerate}
    \item \textbf{RBAC (Role-Based Access Control)}
      \begin{itemize}
        \item Szerepkörök alapján
        \item Példa: Admin, Editor, User
      \end{itemize}
    
    \item \textbf{ABAC (Attribute-Based)}
      \begin{itemize}
        \item Attribútum alapján (user, resource, context)
        \item Példa: "Department = IT és 9-17 között"
      \end{itemize}
    
    \item \textbf{ACL (Access Control List)}
      \begin{itemize}
        \item Erőforrás-szintű lista
        \item Példa: fájlrendszer jogosultságok
      \end{itemize}
  \end{enumerate}
\end{frame}

\begin{frame}{RBAC - Szerepkör alapú}
  \begin{block}{Lényege}
    Felhasználók szerepköröket kapnak, ez határozza meg a jogosultságokat.
  \end{block}
  
  \begin{columns}
    \begin{column}{0.48\textwidth}
      \textbf{Előnyök:}
      \begin{itemize}
        \item Könnyű adminisztráció
        \item Átlátható
        \item Gyors ellenőrzés
      \end{itemize}
    \end{column}
    
    \begin{column}{0.48\textwidth}
      \textbf{Hátrányok:}
      \begin{itemize}
        \item Skálázhatóság
        \item Kevesebb rugalmasság
      \end{itemize}
    \end{column}
  \end{columns}
\end{frame}

\begin{frame}{ABAC - Attribútum alapú}
  \begin{block}{Lényege}
    Hozzáférési szabályok attribútumok alapján.
  \end{block}
  
  \begin{itemize}
    \item \textbf{User:} szerepkör, osztály, beosztás
    \item \textbf{Resource:} tulajdonos, típus
    \item \textbf{Context:} idő, hely, eszköz
  \end{itemize}
  
  \begin{exampleblock}{Példa szabály}
    \texttt{(role=Manager) AND (resource.owner = user) AND (time < 18:00)}
  \end{exampleblock}
\end{frame}

\begin{frame}{ACL - Access Control List}
  \begin{block}{Lényege}
    Erőforrásonként tárolt lista a hozzáférési jogokról.
  \end{block}
  
  \begin{itemize}
    \item \textbf{Példa:} fájlrendszer (read, write, execute)
    \item \textbf{Előny:} finém hozzáférés
    \item \textbf{Hátrány:} nagy rendszereknelnehéz kezelni
  \end{itemize}
\end{frame}

\begin{frame}{Autorizáció webalkalm azásban}
  \begin{block}{Tipikus folyamat}
    Szerver minden kérésnél ellenőrzi a jogosultságot.
  \end{block}
  
  \begin{enumerate}
    \item Authnentikáció után szerepkör kiosztás
    \item Tokenben vagy session-ben tárolás
    \item Middleware ellenőrzi a hozzáférést
    \item Nincs jog: \texttt{403 Forbidden}
  \end{enumerate}
  
  \begin{alertblock}{HTTP státuszkód}
    \texttt{401} = nincs auth, \texttt{403} = nincs jogosultság
  \end{alertblock}
\end{frame}

\begin{frame}[fragile,shrink=10]{Autorizációs middleware (RBAC)}
  \begin{exampleblock}{Egyszerű szerepkör ellenőrzés}
    \tiny
    \begin{verbatim}
const authorize = (...roles) => {
  return (req, res, next) => {
    const { role } = req.user; // pl. JWT-ből
    if (!roles.includes(role)) {
      return res.status(403).json({ error: 'Forbidden' });
    }
    next();
  };
};

app.get('/admin', auth, authorize('Admin'), (req, res) => {
  res.json({ data: 'Admin content' });
});
    \end{verbatim}
  \end{exampleblock}
\end{frame}

\begin{frame}[fragile,shrink=10]{Policy alapú autorizáció (ABAC)}
  \begin{exampleblock}{Szabály központú hozzáférés}
    \tiny
    \begin{verbatim}
const canAccess = (user, resource) => {
  return user.department === resource.department &&
         user.level >= resource.requiredLevel &&
         new Date().getHours() < 18;
};

app.get('/reports/:id', auth, async (req, res) => {
  const report = await getReport(req.params.id);
  if (!canAccess(req.user, report)) {
    return res.status(403).json({ error: 'Forbidden' });
  }
  res.json(report);
});
    \end{verbatim}
  \end{exampleblock}
\end{frame}

\begin{frame}{Legkisebb jogosultság elve}
  \begin{block}{Principle of Least Privilege}
    Mindenki csak a feladatohoz szükséges minimális jogokat kapja.
  \end{block}
  
  \begin{itemize}
    \item Csökkenti a kockázatot
    \item Korlátozza a hibák hatását
    \item Egyszerűbb auditálás
  \end{itemize}
  
  \begin{alertblock}{Gyakori hiba}
    \textbf{Mindenki admin} = gyors fejlesztés, de veszélyes élesben!
  \end{alertblock}
\end{frame}

\begin{frame}{Autorizáció Best Practices}
  \begin{itemize}
    \item Minden érzékeny végpontot ellenőrizz
    \item Middleware vagy policy réteg
    \item Role/policy központi kezelés
    \item Logolás
    \item Admin funkciók külön kezelése
    \item RBAC + ABAC kombináció
  \end{itemize}
\end{frame}

\begin{frame}{Összefoglalás - Autorizáció}
  \begin{itemize}
    \item Autorizáció = hozzáférések és jogosultságok kezelése
    \item 401 vs 403: authentikáció hiánya vs jogosultság hiánya
    \item Fő modellek: RBAC, ABAC, ACL
    \item Middleware-ekkel megvalósítható a gyakorlatban
    \item Least Privilege elv alkalmazása
  \end{itemize}
  
  \vspace{0.5cm}
  
\end{frame}