I collegamenti corretti sono:
http://www.studio-virtuale.net/Portals/0/DotNetNuke_2.1.2.zip-ARUBA.source.zip
http://www.studio-virtuale.net/Portals/0/DotNetNuke_2.1.2-ARUBA.zip
Ho corretto il timeout di sessione (thanks per la segnalazione).
Peccato per ARUBA. Ora non resta che modificare i sorgenti di DNN 3.x per l'installazione. A tal proposito riporto un post inviato in www.dnnitalia.com (http://www.dnnitalia.com/Forum/tabid/52/forumid/8/threadid/4930/threadpage/8/scope/posts/Default.aspx):
Mai scoraggiarsi
Intanto sarebbe bene ricreare le limitazioni di ARUBA sul PC a casa per poter testare una soluzione funzionante. Per cui:
dalla nostra cartella DNN eliminiamo i permessi di lettua e scrittura dell'utente ASPNET
- nella cartella DNN aggiungiamo una cartella PUBLIC
- aggiungiamo a tale cartella i permessi di lettura e scrittura dell'utente ASPNET
- creaiamo un DB user senza i permessi di amministrazione che utilizzeremo per la nostra installazione DNN.
In effetti è possibile installare DNN 3 su ARUBA, solo che va modificato il core, quindi si perde la possibilità di installare gli aggiornamenti ed inoltre possono esserci dei problemi con i moduli personalizzati di cui non si hanno i sorgenti (penso).
Vi riporto gli step che avevo affrontato per l'installazione FUNZIONANTE di dnn 3 su aruba:
- modifica percorsi per installare tutto sulla cartella PUBLIC da sorgenti VB, ASPX e WEBCONFIG
- modifica script "*.SqlDataProvider" eliminando con un sostituisci di notepad DBO. e [dbo]. (senza mettere il nome dell'utente fornito da ARUBA: funziona comunque ed inoltre si ottiene uno script che va bene per tutti)
- modifica script "*.sql" eliminando con un sostituisci di notepad DBO. e [dbo].
A questo punto i problemi legati ai permessi web di ARUBA sono superati. Resta il problema che la gestione dell'autenticazione utenti, legata agli script *.sql, cerca delle tabelle e procedure nel DB che si chiamano:
dbo.aspnet_Membership
dbo.aspnet_Profile
dbo.aspnet_Roles
ecc...
eliminando dagli script *.sql dbo. in fase di installazione creaiamo delle tabelle e procedure chiamate:
NomeDBAruba.aspnet_Membership
NomeDBAruba.aspnet_Profile
NomeDBAruba.aspnet_Roles
ecc...
Per le limitazioni di SQL Aruba non possiamo lasciare il nome delle procedure/tabelle con DBO, altrimenti non possiamo accederci.
In teoria nel WEBCONFIG c'è una riga in cui indichiamo chi è il proprietario del DB e l'applicazione dovrebbe accedere al DB attraverso quel proprietario. Questo è vero per DNN ma l'autenticazione è creata da Microsoft, pensata per avere un'unica autenticazione con applicativi diversi, attraverso appunto gli script SQL e la DLL MemberRole.dll.
Se notate all'interno della cartella Providers si trovano i progetti:
- MembershipProviders
- ProfileProviders
- RoleProviders
Tutti e tre utilizzano la DLL incriminata, che ripeto, è stata programmata prevedendo l'accesso al DB con lo user DBO.
Non per niente le istruzioni di installazione di DNN richiedono:
The databaseOwner attribute is used to identify the user that “owns” the database objects. By default it is set to “dbo” and in most cases this attribute should be left this way. However, some SQL Server DBAs (in particular in Shared Hosting Environments) may not grant the user you identify in the connection string db_owner privileges. In this case, set the databaseOwner attribute to your login user. Note this user will need to have the following SQL Permissions, at a minimum:
- db_datareader (necessary for dotnetnuke)
- db_datawriter (necessary for dotnetnuke)
- db_ddladmin (neccessry for MemberRoles)
- db_securityadmin (necessary during installation of MemberRoles)
E su ARUBA mancano appunto le ultime due.
Ma attraverso Vb.NET è possibile crearsi il proprio provider di autenticazione evitando quindi di utilizzare come proprietario DBO; attraverso funzioni e proprietà "Overrides" facciamo le modifiche che riteniamo opportune.
E qui sorgono altri problemi ... quali sono le modifiche opportune?
Supponiamo che DNN utilizzi la funzione presente nella DLL IsUserInRole, ecco che devo modificarla per utilizzare la stringa di connessione che non contiene DBO.
Noi dovremmo creare nel nostro DNNSQLRoleProvider una funzione del tipo:
Public Overrides Function IsUserInRole(ByVal username As String, ByVal roleName As String) As Boolean
Dim flag2 As Boolean = False
Try
Dim parameterArray1 As SqlParameter() = New SqlParameter(3 - 1) {}
parameterArray1(0) = New SqlParameter("@ApplicationName", SqlDbType.NVarChar)
parameterArray1(0).Value = Me.ApplicationName
parameterArray1(1) = New SqlParameter("@UserName", SqlDbType.NVarChar)
parameterArray1(1).Value = username
parameterArray1(2) = New SqlParameter("@RoleName", SqlDbType.NVarChar)
parameterArray1(2).Value = roleName
Dim num1 As Integer = IntegerType.FromObject(SqlHelper.ExecuteScalar(Me._ConnectionString, "aspnet_UsersInRoles_IsUserInRole", parameterArray1))
If (num1 > 0) Then
flag2 = True
End If
Catch exception2 As Exception
ProjectData.SetProjectError(exception2)
Dim exception1 As Exception = exception2
ProjectData.ClearProjectError()
End Try
Return flag2
In sostanza abbiamo detto che va utilizzata la nostra funzione (la cui stringa di connessione è con lo user "normale") e non quella di di MembersRole.dll.
Non per scoraggiarti, ma le modifiche da fare sono moltissime.
Io, dopo qualche settimana di lavoro a tempo perso, ero arrivato a buon punto, sennochè esce la nuova release di DNN. Butto tutte le modifiche e inizio di nuovo sulla nuova release, poi dopo qualche altra settimana completo il tutto, faccio l'installazione e vedo che i moduli personalizzati non funzionato, le skin danno problemi, altro tempo per sistemare i sorgenti (dove possibile).
Alla fine concludo che potevo sopravvivere anche con la versione 2.1.2 che non aveva tutti questi problemi anche con ARUBA, finchè non scopro http://www.websecurestores.com/, che a prezzi onesti offre 500 MB di spazio SQL con DNN preinstallato.
I lavori fatti mi sono serviti per conoscere meglio sia DNN che VB.NET e considero più economico spendere 120$ che sprecare tempo a rincorrere ARUBA ad ogni release di DNN
ARUBA ora non lo utilizzo più.