// deze methode geeft enkel true of false terug, niet wat er niet juist is // true = lid gekend en geauthoriseerd // false = lid niet gekend of een authorisatierol is niet toegekend aan lid public static bool Check(string[] roles, ITempDataDictionary tempData, TegoareContext ctx) { LoginBeheerder lb = new(ctx); // enkel zoeken op gebruiker, niet op rollen if (roles == null) { Lid lid = lb.FindUser((String)tempData.Peek("LoginNaam"), (String)tempData.Peek("LoginWachtwoord")); if (lid == null) { //gebruiker niet gevonden return(false); } else { //gebruiker gevonden return(true); } } // indien hier ook zoeken op rollen foreach (string role in roles) { // heeft deze rol niet if (!lb.CheckRole((String)tempData.Peek("LoginNaam"), (String)tempData.Peek("LoginWachtwoord"), role)) { return(false); } } // is gekend en heeft alle nodige rollen return(true); }
// roles: welke roles MOET de gebruiker hebben // tempData: waar is de login en wachtooord // ctx: in welke database moet ik zoeken // // RETURN: - geeft null terug als alles lid gekend is en de gezochte // authorizatierollen heeft // null == succes is niet logisch // - geeft een link naar het login scherm als de gebruiker niet gekend is // - geeft een link naar niet geauthoriseerd als de gebruiker gekend is, maar // niet de juiste authorizatie heeft public static IActionResult CheckIfAllowed(string[] roles, ITempDataDictionary tempData, TegoareContext ctx) { // indien gebruiker niet gekend, ga naar login pagina if (!Check(null, tempData, ctx)) { return(new RedirectToActionResult("LogIn", "Account", null)); } // indien de gekende gebruiker niet de juiste authorisatie (rollen) heeft // mag hij de gegevens niet zien // deze check wordt enkel uitgevoerd als het lid gekend is, // maar geen rolescheck nodig heeft if (roles != null && !Check(roles, tempData, ctx)) { return(new StatusCodeResult(StatusCodes.Status401Unauthorized)); } // gebruiker is gekend en heeft de juiste authorisatie return(null); }