Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

ASP.NET: tijdelijke rollen toewijzen

Pagina: 1
Acties:

Verwijderd

Topicstarter
In mijn gestaag vorderende projectje probeer ik mijn asp.net/VB webapplicatie te beveiligen met de RoleProvider van asp.net. Authenticatie gebeurt met Windows-Authenticatie (Active domain - intranet) Nu is het zo dat de volgende rollen aanwezig zijn:

-SiteCoordinator (mag redelijk veel)
-SiteAssistant (mag alleen een aantal algemene zaken)
-ProjectAdmin (mag binnen het eigen project praktisch alles)
-ProjectEditor (Mag alleen data toevoegen en sommige zaken wijzigen binnen het eigen project)
-ProjectReader (Mag data uit het eigen project bekijken)

De laatste drie rollen zijn gekoppeld aan projecten die bij ons op de afdeling draaien. Een medewerker kan SiteAssistant alsmede ProjectEditor zijn voor een of meerdere projecten. De rol van ProjectEditor moet dus gekoppeld zijn aan een project (Je zou hiervoor per project een set nieuwe rollen kunnen aanmaken (voorbeeld: Proj1_ProjectAdmin, Proj1_ProjectEditor, Proj1_ProjectReader) en daarnaast kennen de "project"-rollen een tijdelijk karakter. Iemand kan gedurende een maand, een dag een jaar (you name it) betrokken zijn bij project1 en vervolgens bij een ander project.

Wat ik dus eigenlijk zou willen is dat in de tabel aspnet_usersinroles die bij installatie van vs2005 & asp.net in de SQL 2005 DB aangemaakt wordt twee extra kolommen toegevoegd (en gebruikt!) konden worden, te weten: StartParticipatie, EindParticipatie oid. Die kolommen toevoegen zal kinderspel zijn, maar is het haalbaar om de RoleProvider zo aan te passen dat gecheckt wordt of de huidige datum binnen de range valt van StartParticipatie, EindParticipatie? En zo ja, hoe kan ik dat doen?

Dank voor jullie gouden tips.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Het is vrij eenvoudig te overerven van de RoleProvider en dan je eigen RoleProvider (middels de web.config) aan je applicatie te hangen. Override de methode IsInRole (of iets dergelijks) en laat de rest van de methodes ongemoeid. Redelijk snel te realiseren, en het werkt als een tierelier! Heb het eerder al bij andere projecten gedaan.

Zodra je echter bij de database gaat knoeien wordt het wellicht wat minder makkelijk. Je zult ook stored procedures aan moeten passen. Je kunt kijken of dat simpel te doen is, en anders gewoon een apart filetje/databaseje bijhouden waar de duur van de participatie in vastgelegd wordt.

My personal website


Verwijderd

Topicstarter
Dank! Ik ga dat overerven proberen. Als alternatief had ik inderdaad al de check in stored procedures bedacht, maar vond dat ik het eerst "netjes" moest proberen en alle authorisaties met één middel checken.

Als ik bij dat overerven niet uitkom dan hoop ik dat ik nog even bij je aan mag kloppen OZ-Gump! :o

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:48

gorgi_19

Kruimeltjes zijn weer op :9

OZ-Gump schreef op donderdag 19 juli 2007 @ 16:41:
Het is vrij eenvoudig te overerven van de RoleProvider en dan je eigen RoleProvider (middels de web.config) aan je applicatie te hangen. Override de methode IsInRole (of iets dergelijks) en laat de rest van de methodes ongemoeid. Redelijk snel te realiseren, en het werkt als een tierelier! Heb het eerder al bij andere projecten gedaan.
Hoezo de IsInRole overriden? Haal je dan bij ieder functie-aanroep de data uit de database op? Of hoe zie je dat voor je? Je kan ook de check doen in Authorize_Request in global.asax, dan kan je per request / tijdseenheid (middels cookie) de rollen toewijzen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
@gorgi_19:

Het leek mij juist fraai om bij toevoegen van een gebruiker aan de tabel aspnet_usersinroles in feite twee extra kolommen te kunnen gebruiken StartParticipatie(smalldatetime), EindParticipatie(smalldatetime). Deze extra kolommen moeten dan wel in alle 6 de relevante procedures, methoden of hoe die dingen mogen heten worden gebruikt:
-AddUsersToRoles
-FindUsersInRole
-GetRolesForUser
-GetUsersInRole
-IsUserInRole
-RemoveUsersFromRoles
Waarbij bij het ophalen simpelweg in de SQL-statement een extra (Where Startpart<GetDate() AND EndPart>GetDate())-echtig iets wordt toegevoegd.

Dan ben je niet/minder afhankelijk van cookies en browser-instellingen en dergelijke.

edit: Trouwens, eigenlijk hoeft alleen de AddUsersToRoles(start en einddatum meegeven) aangepast te worden. De rest van de aanpassingen gebeurt in de door asp.net gemaakte stored procedures.

[ Voor 12% gewijzigd door Verwijderd op 20-07-2007 13:51 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:48

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op vrijdag 20 juli 2007 @ 13:29:
Dan ben je niet/minder afhankelijk van cookies en browser-instellingen en dergelijke.
Bij mij in principe ook niet. Die cookie is alleen als je voor een bepaalde tijdseenheid kiest. Zelf voeg ik per request de rollen toe; dan kan ik ook snel iemand uit het systeem schoppen of rechten veranderen zonder opnieuw in te laten hoeven loggen.

Nadeel van aanpassingen maken in de SP's van MS is dat je de standaardimplementatie gaat wijzigen; bugfixes of updates van MS kan je dan ook niet meer op vertrouwen :)

[ Voor 46% gewijzigd door gorgi_19 op 20-07-2007 13:36 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Dat van die updates en bugfixes is inderdaad een goeie....

Denk dat mijn aversie tegen cookies ook veroorzaakt wordt door het feit dat ik er nooit mee gewerkt heb :? . Misschien moet dat maar eens veranderen of ik moet gewoon mijn wijzigingen goed documenteren om eventuele updates opnieuw te kunnen wijzigen.

Ga eens proberen of het werkt door aanpassing van kolommen en SPs (met alle risico's vandien :) ) en die ene AddUsersToRoles ... hmm dat laatste wordt nog even een uitzoekwerkje, want daar heb ik ik nog geen ervaring in... :P

Edit: Inmiddels de stored procedures bekeken: Die zijn zeer eenvoudig aan te passen. 5 SPs hebben een extra voorwaarde in de Where-clause nodig en 1 SP heeft een serieus stukje SQL nodig. Dat is dus te overzien. Waar ik nog mee in mijn maag zit is de overerving/override van de AddUsersToRoles method in VB. Kan ik hier zomaar extra parameters (StartPart,EndPart) toevoegen als in:

Public Overrides Sub AddUsersToRoles(usernames As String(), rolenames As String(), startPart As String(), endPart As String())

As String() omdat het een comma-delimited list is die later ge-convert wordt in de SP
Het onderstreepte zou dan mijn toevoeging zijn.

edit2: Ok, het aanpassen van de parameter lijst van de AddUsersToRoles method op de manier zoals hierboven kan dus blijkbaar niet |:( Suggesties?

[ Voor 42% gewijzigd door Verwijderd op 20-07-2007 15:42 ]


Verwijderd

Topicstarter
Ok, een suggestie aan mezelf: Overriding werkt niet, maar overloading misschien wel... 8)7
Pagina: 1