Ik ben bezig om een web app te beveiligen en er voor te zorgen dat er onder meer rollen gedefinieerd kunnen worden van wat users mogen en wat niet. Vrijwel automatisch kom ik uit op JAAS. Nou is het niet zo moeilijk om JAAS te gebruiken in bijv. Tomcat, er zijn namelijk tientallen tutorials te vinden die dat beschrijven. Getting started is dus niet de uitdaging.
Waar ik nu wel over zit te piekeren is in welke laag of lagen (data/business/presentatie) ik de de authorisatie ga regelen. Uiteraard in komt er gedeeltelijk het een en ander in de presentatie laag omdat aan de hand van de rollen dingen wel / niet getoond mogen worden en soms de flow wat anders is.
De vraag is wat en hoe ik in de andere lagen dan de authorisatie ga regelen. Ik neig nu sterk naar de datalaag (DAO's) waar ik kan gaan checken of aan de hand van de rol iemand wel de één van de (CRUD) acties mag uitvoeren. Het probleem hierbij is dat wanneer ik over wil gaan op bijv. JPA (het is nu JDBC) ik het hele riedeltje zo'n beetje weer opnieuw mag implementeren. Ander nadeel is dat de scope van de gedefinieerde rollen vrij beperkt wordt. Ik zal hier een klein hypothetisch voorbeeldje van geven van de verhuizing van een afdeling:
Als ik het in de DAO wil gaan oplossen ben ik alle context kwijt. Dan moet ik of 2 rollen definieren (Role_UpdateEmployee en Role_UpdateDepartment) en deze checken in de DAO's of 1 rol definieren (Role_MoveDepartment) en deze in beide DAO's checken.
Ik kan het ook in business laag kunnen regelen (de Role checken in de beschreven method), dan hoef ik het maar 1x te doen en scheelt het mij weer werk wanneer we de JDBC laag gaan vervangen door JPA. Zo ik nu er over nadenk, zal de laatste optie de beste zijn.
Tevens zit ik te kijken of ik ook het één en ander met AOP kan doen. Hoewel ik al blij ben als ik bovenstaande een beetje uitgedokterd heb.
Wat zijn jullie gedachten hier over? Weet iemand nog goede (online) bronnen over dit onderwerp?
Waar ik nu wel over zit te piekeren is in welke laag of lagen (data/business/presentatie) ik de de authorisatie ga regelen. Uiteraard in komt er gedeeltelijk het een en ander in de presentatie laag omdat aan de hand van de rollen dingen wel / niet getoond mogen worden en soms de flow wat anders is.
De vraag is wat en hoe ik in de andere lagen dan de authorisatie ga regelen. Ik neig nu sterk naar de datalaag (DAO's) waar ik kan gaan checken of aan de hand van de rol iemand wel de één van de (CRUD) acties mag uitvoeren. Het probleem hierbij is dat wanneer ik over wil gaan op bijv. JPA (het is nu JDBC) ik het hele riedeltje zo'n beetje weer opnieuw mag implementeren. Ander nadeel is dat de scope van de gedefinieerde rollen vrij beperkt wordt. Ik zal hier een klein hypothetisch voorbeeldje van geven van de verhuizing van een afdeling:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| public class DepartmentService() { public void move(Department department, Location location) { //start transaction for (Employee employee : department.getEmployees(); { //Some employees work at home if (employee.getLocation().equals(department.getLocation()) { employee.setLocation(location); employeeDao.save(employee); } } department.setLocation(location); departmentDao.save(department); //end transaction } } |
Als ik het in de DAO wil gaan oplossen ben ik alle context kwijt. Dan moet ik of 2 rollen definieren (Role_UpdateEmployee en Role_UpdateDepartment) en deze checken in de DAO's of 1 rol definieren (Role_MoveDepartment) en deze in beide DAO's checken.
Ik kan het ook in business laag kunnen regelen (de Role checken in de beschreven method), dan hoef ik het maar 1x te doen en scheelt het mij weer werk wanneer we de JDBC laag gaan vervangen door JPA. Zo ik nu er over nadenk, zal de laatste optie de beste zijn.
Tevens zit ik te kijken of ik ook het één en ander met AOP kan doen. Hoewel ik al blij ben als ik bovenstaande een beetje uitgedokterd heb.
Wat zijn jullie gedachten hier over? Weet iemand nog goede (online) bronnen over dit onderwerp?
The ships hung in the sky in much the same way that bricks don’t.