giovedì 12 giugno 2008

Permessi personalizzati per i moduli

Oggi affrontiamo il problema dei permessi ed in particolare come è possibile aggiungere ad un modulo custom dei permessi aggiuntivi oltre a quelli di default.

Innanzi tutto facciamo qualche premessa. In base a quanto detto nei post precedenti per la creazione di un modulo custom con l'ausilio dello StarterKit partiamo dalla situazione in cui abbiamo configurato il nostro modulo aggiungendolo ad una pagina.

Se tutto è andato bene dovremmo essere di fronte a qualche cosa del genere:

Come vedete nella colonna centrale è presente il nostro modulo dimostrativo. A questo punto possiamo iniziare ad insererire all'interno del nostro modulo il codice necessario per aggiungere i permessi.

Il codice da inserire riguarda il nostro controller principale, DemoModuleController che si trova nella directory App_Data.

All' interno di questo controller possiamo aggiungere il codice riportato di seguito lasciando inalterati i metodi già esistenti:


Imports System
Imports System.Configuration
Imports System.Data
Imports System.XML
Imports System.Web
Imports System.Collections.Generic
Imports DotNetNuke
Imports DotNetNuke.Services.Search
Imports DotNetNuke.Common.Utilities.XmlUtils
Imports DotNetNuke.Entities.Modules
Imports DotNetNuke.Entities.Modules.Definitions

Namespace DotNetNukeIta.Modules.DemoModule

'''
''' The Controller class for DemoModule
'''

'''
'''

'''
'''

''' ------------------------------------------
Public Class DemoModuleController
Implements Entities.Modules.ISearchable
Implements Entities.Modules.IPortable

#Region "Variabili Private"
Private _PremessoDemo As Boolean
#End Region

#Region "Costanti pubbliche"
Public Const PERMISSIONCODE As String = "DemoModule"

Public Const PERMESSODEMO As String = "PERMESSODEMO"
#End Region

#Region "Private Methods"

Private Sub InitModulePermissions()

Dim permCtl As Permissions.PermissionController = New Permissions.PermissionController()
Dim arr As ArrayList = permCtl.GetPermissionByCodeAndKey(PERMISSIONCODE, "")
Dim desktopMod As DesktopModuleController = New DesktopModuleController()
Dim desktopInfo As DesktopModuleInfo = desktopMod.GetDesktopModuleByModuleName("DotNetNukeIta.DemoModule")
Dim modDef As ModuleDefinitionController = New ModuleDefinitionController()
Dim modDefInfo As ModuleDefinitionInfo = modDef.GetModuleDefinitionByName(desktopInfo.DesktopModuleID, "GECO")

'Settaggio permessi sulle Pagine AnagraficaPF
Try
Dim pi As Permissions.PermissionInfo = New Permissions.PermissionInfo()
pi.ModuleDefID = modDefInfo.ModuleDefID
pi.PermissionCode = PERMISSIONCODE
pi.PermissionKey = PERMESSODEMO
pi.PermissionName = "Permesso personalizzato"
permCtl.AddPermission(pi)
Catch e As Exception
' gestisco l'eventuale eccezione
End Try

End Sub

#End Region

#Region "Metodi Pubblici"

Public Function UpgradeModule(ByVal Version As String) As String
'Possiamo impostare un controllo a piacere
' in questo caso controlliamo il numero di versione del modulo
' e istalliamo i permessi solo se il modulo è alla versione 01.00.00
If (Version = "01.00.00") Then
' Istallazione dei permessi per il modulo
InitModulePermissions()
End If

'Se tutto è andato bene aggiorno la versione del modulo
Version = "01.00.01"
Return Version
End Function

Public ReadOnly Property PermessoDiDemo() As Boolean
Get
Return _PremessoDemo
End Get
End Property

''' Esempio di utilizzo :
'''
''' Dim ms As DemoModuleController = New GECOController()
''' Dim objModules As ModuleController = New ModuleController()
''' Dim objMudule As ModuleInfo
''' objMudule = objModules.GetModule(ModuleId, TabId)
''' ms.ModuleSecurity(objMudule)
'''-----------------------------------------------------------
Public Sub ModuleSecurity(ByVal modInfo As ModuleInfo)
Dim permCollection As Permissions.ModulePermissionCollection

permCollection = modInfo.ModulePermissions
Dim permCtl As Permissions.ModulePermissionController = New Permissions.ModulePermissionController()
_PremessoDemo = Permissions.ModulePermissionController.HasModulePermission(permCollection, PERMESSODEMO)

End Sub

#End Region


La Sub InitModulePermissions consente di inizializzare la definizione dei permessi per il nostro modulo. Possiamo quindi pensare di chiamarla quando più ci fa comodo, per esempio all'istallazione o all'aggiornamento del modulo stesso.

Una volta inseriti i permessi accedendo alle impostazioni del modulo (icona in alto a sinistra del modulo, settings) avremo il permesso tra quelli disponibili come appare di seguito:

Prima:

Dopo:

Come vedete si è aggiunta una colonna col il nuovo permesso. A questo punto dalle nostre pagina possiamo richiamare il metodo per controllare i permessi:



'*****controllo permessi*****
Dim ms As DemoModuleController
Dim objModules As ModuleController
Dim objMudule As ModuleInfo

ms = New DemoModuleController()
objModules = New ModuleController()

objMudule = objModules.GetModule(ModuleId, TabId, False)
ms.ModuleSecurity(objMudule)

If ms.PermessoDiDemo = False Then
Response.Redirect(NavigateURL())
End If
'*****controllo permessi*****


Ed il gioco è fatto ...

Nessun commento: