webForumDet fria alternativet

Validering av användaren

1 svar · 248 visningar · startad av jme

jmeMedlem sedan maj 20011 967 inlägg
#1

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?

JaarMedlem sedan juli 2001434 inlägg
#2

Jag tycker en lösning liknande version 2 är klart bättre.
Då kan du lagra vilka sidor som behöver vilka premissions via en databas eller liknande. Då får du det snyggt modulärt.

Skicka med sidnamnet eller liknande in mot tabellen (eller prop filen eller var det nu är) och hämta upp vad som behövs för rättigheter. Släng ut en PagePremissions klass eller något som du sedan skickar in ett UserPremission klass in i och spottar ut sig om användaren får eller inte får göra nåt...

Så skulle jag nog göra iaf... Inte för att jag tänkt igenom det hela i detalj men det kändes "snyggast"

Genererad på 370 ms · cache AV · v20260730165559-full.f96bc7eb