Nel nuovo namaspace IToolS.Components.Web.Services.Security presente dalla versione 3.4.0.16 e’ presente la classe SecurityContext che permette di gestire autenticazione e autorizzazione degli utenti sia in applicazioni web che desktop.
Per utilizzare il compenente IToolS.Components.Web e’ necessario il framework .NET 4.5.
Per utilizzare il namespace IToolS.Components.Web.Services.Security e’ necessario aver installato sulla macchina di destinazione SQLLocalDB, eventualmente e’ possibile utilizzare anche una istanza di Sql Server.
Per utilizzarlo occorre inserire nell’applicazione i seguenti riferimenti:
“IToolS.Data.Extensions.dll”
“IToolS.dll”
“System.Web.Cors.dll”
“System.Web.Providers.dll”
“WebMatrix.Data.dll”
“WebMatrix.WebData.dll”
“EntityFramework.dll”
“EntityFramework.SqlServer.dll”
“IToolS.Components.dll”
“IToolS.Components.Extensions.dll”
“IToolS.Components.Web.dll”
“IToolS.Data.dll”
Assicurarsi che le dll inserite vengono copiate nella directory di output del progetto impostando “Copy local” = True;
L’app.config dell’applicazione deve contenere le seguenti informazioni:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> <connectionStrings> <add name="SecurityConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Security.mdf;Integrated Security=True;" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <roleManager enabled="true" defaultProvider="SimpleRoleProvider"> <providers> <clear /> <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" /> </providers> </roleManager> <membership defaultProvider="SimpleMembershipProvider"> <providers> <clear /> <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" /> </providers> </membership> <sessionState mode="Custom" customProvider="DefaultSessionProvider"> <providers> <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="SecurityConnection" /> </providers> </sessionState> </system.web> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration> |
Quindi per inizializzare la sicurezza:
1 2 3 4 5 6 7 8 9 10 11 12 |
SecurityContext securityContext = new SecurityContext(); securityContext.Initialize(); if (!Users.UserExists("IprelUser")) Users.AddUser("IprelUser", "Passw0rd"); if (!Roles.RoleExists("Administrators")) Roles.AddRole("Administrators"); if (Roles.GetRolesForUser("IprelUser").Where(r => r == "Administrators").FirstOrDefault() == null) Roles.AllowRoleForUser("Administrators", "IprelUser"); |
Mentre per eseguire un login:
1 2 |
if (Users.Login("IprelUser", "Passw0rd")) MessageBox.Show("login ok!"); |
Nel database viene creata una struttura del tipo: