Er wordt hier in een project gebruik gemaakt van het 'Authorization, profile app. building block'.
Daarin wordt voor iedere webmethod-call een security check gedaan.
Dat ziet er ongeveer zo uit
De webmethod maakt een business object aan, deze heeft een “zoek iets method”:
Daarin staat dan het volgende (pseudo)
De authoriseUser method ziet er zo uit:
Maar, volgens mij hebben we het over een workerthread die meerdere requests tegelijk uitvoert.
Dus stel, gebruiker A wil iets, en B ook. (gelijktijdig)
A heeft rechten om de method uit te voeren, B niet.
Er wordt een stukje van het Request van A uitgevoerd:
A zet de Thread.CurrentPrinicpal op zijn geautoriseerde ExtendedPrinicpal,
Nu wordt een deel van het Request van B uitgevoerd:
B schrijft hem direct over met zijn eigen ExtendedPrinicpal. (niet geautoriseerd)
Nu wordt er weer een stukje A uitgevoerd:
(Nu staat de CurrentPrincipal van de Thread dus op de principal van B ( het is een static property ) )
---> IsInRole() voor A geeft 'false'.
Is dat nu een denkfout van mij, of is het block niet bruikbaar in web-omgevingen?
Daarin wordt voor iedere webmethod-call een security check gedaan.
Dat ziet er ongeveer zo uit
De webmethod maakt een business object aan, deze heeft een “zoek iets method”:
Daarin staat dan het volgende (pseudo)
code:
1
2
3
4
| Zoekiets()
{
if ( authoriseUser( Context.User) )
} |
De authoriseUser method ziet er zo uit:
code:
1
2
3
4
5
6
7
| authoriseUser( IPrincipal pr )
{
ExtendedPrinicpal expr = ExtendedPrinicpal.Create ( pr )
Thread.CurrentPrincipal = expr;
//heeft gebruikersrol toegang?
return IsInRole( Thread.CurrentPrincipal )
} |
Maar, volgens mij hebben we het over een workerthread die meerdere requests tegelijk uitvoert.
Dus stel, gebruiker A wil iets, en B ook. (gelijktijdig)
A heeft rechten om de method uit te voeren, B niet.
Er wordt een stukje van het Request van A uitgevoerd:
A zet de Thread.CurrentPrinicpal op zijn geautoriseerde ExtendedPrinicpal,
Nu wordt een deel van het Request van B uitgevoerd:
B schrijft hem direct over met zijn eigen ExtendedPrinicpal. (niet geautoriseerd)
Nu wordt er weer een stukje A uitgevoerd:
(Nu staat de CurrentPrincipal van de Thread dus op de principal van B ( het is een static property ) )
---> IsInRole() voor A geeft 'false'.
Is dat nu een denkfout van mij, of is het block niet bruikbaar in web-omgevingen?
[ Voor 2% gewijzigd door LoekD op 29-07-2004 10:40 . Reden: context.user ip context.user.identity ]
Hoe meer je drinkt, hoe korter je leeft, hoe minder je drinkt