Hej!
Jag håller på att ta fram ett login-system åt en kund.
Jag har en controller-servlet som dirigerar användarens förfrågan till en speciell klass som sedan visar resultatet i html.
client --- request ---> Controller ---> RequestHandler --- process data ---> output result as html
Systemet har olika användarnivåer, låt oss säga användare, samt admin. Beroende på vilken operation varje RequestHandler utför, så måste de kontrollera om användaren har rättigheterna till just den operationen.
Detta är vad jag just nu tänker på, hur implementera kontrollen?
Om användaren är inloggad, så lagras den information tillsammans med användar-id och användarnivå i en speciell klass, som sedan lagras i ett Session-objekt. Vid kontroll så kan man sedan plocka fram denna klass ur Session-objektet.
En av dessa två följande vägar har jag tänkt att gå:
Kontrollen sköts internt av varje RequestHandler.
public String handleRequest(request, response)
{
if( validation is required)
{
session = request.getSession();
userBean = (UserBean)session.getAttribute("user");
if(userbean != null)
{
// användaren är inloggad
int userlevel = userbean.getUserLevel();
if(userLevel >= NEEDED_LEVEL_FOR_THIS_OPERATION)
{
// användaren har tillräckliga rättigheter
// hantera förfrågan osv osv
}
else
{
// användaren har inte tillräckliga rättigheter och returneras till en viss sida
return "fel.jsp";
}
}
}
else
{
}
}
}
Problemet som jag ser är att samma kod måste kopieras till flera klasser, om inte det placeras i en separat klass.
Kontrollern sköter valideringen externt.
if(rh.validationRequired() ) // rh = RequestHandler
{
int neededUserlevel = rh.getNeededUserLevel();
userbean = (UserBean)session.getAttribute("user");
int currentUserLevel = userbean.getUserLevel();
if(currentUserLevel >= neededUserLevel)
{
// användaren har tillräckliga rättigheter
rh.handleRequest(request, response)
}
else
{
// användaren har inte tillräckliga rättigheter
}
}
Kan tillägga att i exemepel 1 så bör jag lägga själva validerings-delen i en egen klass som sedan anropas.
Då blir det mindre copy-paste men fortfarande så måste jag implementera valideringen til len viss del.
Vad tycker ni?