Integrare SQL Server Compact 4.0 con la security di ASP.NET

di Daniele Bochicchio, in ASP.NET 4.0, Membership API, Roles API,

SQL Server Compact 4 rappresenta un'ottima soluzione per sostuire SQL Server, quando la potenza di quest'ultimo non è necessaria. Avendo piena compatibilità con Entity Framework, tendenzialmente adattare una soluzione pensata per SQL Server non è molto complesso: basta adattare la stringa di connessione ed assicurarsi che il modello sia simile.

ASP.NET, sin dalla versione 2.0, supporta un meccanismo di accesso ad aree protette molto flessibile, basato su provider e quindi facilmente estendibile, che prende il nome di Membership e Roles API. Sfortunatamente, non esiste un provider predefinito per SQL CE e quello per SQL Server non è compatibile. In questo caso, dunque, è necessario sviluppare un provider ad hoc, scrivendo opportunamente il codice.

Nel nostro caso, abbiamo deciso di partire con una struttura semplice, basandoci sullo starter kit che sfrutta Entity Framework, disponibile su http://lab.aspitalia.com/64/Starter-Kit-Entity-Framework-Provider-Membership-Roles-API.aspx

Questo starter kit è pensato per Entity Framework e SQL Server, ma può essere facilmente adattato a SQL CE, perchè Entity Framework, a propria volta, lavora con il concetto di provider. Ricostruendo il database (che si trova allegato), è possibile adattare la stringa di connessione, specificando come segue il provider da utilizzare:

<add name="UserEntities"
connectionString="metadata=res://*/App_Code.ObjectModel.SecurityModel.csdl|res://*/App_Code.ObjectModel.SecurityModel.ssdl|res://*/App_Code.ObjectModel.SecurityModel.msl;provider=System.Data.SqlServerCe.4.0;provider connection string="Data Source=|DataDirectory|\Authentication.sdf"" providerName="System.Data.EntityClient" />

Non è necessario fare altro, perchè il modello è identico e quindi Entity Framework, semplicemente, adatta le proprie query.

Una volta fatto questo passo, il provider consentirà di sfruttare le funzionalità principali legate a Membership e Roles API, ad esempio relative al login, sfruttando il controllo Login.
I provider per Membership e Roles vanno registrati all'interno del web.config, come segue:

<!-- Membership API-->
<membership defaultProvider="DBServerMembership">
  <providers>
    <clear />
    <add name="DBServerMembership" type="DBMembershipProvider, App_Code" />
  </providers>
</membership>

<!-- Roles API -->
<roleManager enabled="true" defaultProvider="DBServerRoles" cacheRolesInCookie="true" cookieProtection="All">
  <providers>
    <add name="DBServerRoles" type="DBRoleProvider, App_Code" />
  </providers>
</roleManager>

I provider allegati non implementano tutte le funzionalità, ma grazie alla facilità di utilizzo di Entity Framework, diventa relativamente semplice aggiungere quelle mancanti. Nell'allegato si trova una soluzione completa, con cui testarne il funzionamento. Il codice è pensato per ASP.NET 4.0, ma con alcune accortezze (relative alle differenze tra Entity Framework 1.0 e 4.0), è possibile farne uso anche in presenza di ASP.NET 3.5 SP 1.

Riferimenti utili

Dite addio ad Access con SQL Server Compact 4.0 (speciale)
https://www.aspitalia.com/focuson/1207/Dite-Addio-Access-SQL-Server-Compact-4.0.aspx

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi