While creating my own DotNetNuke 5 modules I found myself adding all kinds of custom permission in the code, but then the admin users didn’t have any access to change them. I found myself having to update the code every time they wanted to add, or remove, a role from a particular permission.
There’s a better way. In DotNetNuke 5 you can piggyback on the existing permissions functionality.
Let’s say we’re creating a module called Assets and we need a custom permission that allows particular users and roles to assign the asset to other users. The standard “View Module” and “Edit Module” won’t get us there.
1.First create your customer module and include an App_Code folder.
2. The first thing we need to do is create a class called “Module Security” and place it in the App_Code folder of our module. The code for the module looks like this (see notes below the code for explanation):
Imports Microsoft.VisualBasic
Imports DotNetNuke.Entities.Modules
Imports DotNetNuke.Security.Permissions
Namespace MyModules.Modules.Asset
Public Class ModuleSecurity
'Constants
Public Const PERMISSIONCODE As String = "MYMOD_ASSET"
Public Const PN_ASSIGN As String = "ASSET_ASSIGN"
'private variables
Private _ASSIGN As Boolean = False
Private _moduleInfo As ModuleInfo
Sub New(ByVal moduleInfo As ModuleInfo)
' TODO: Complete member initialization
_moduleInfo = moduleInfo
ModuleSecurity(moduleInfo)
End Sub
Public Sub ModuleSecurity(ByVal moduleInfo As ModuleInfo)
Dim permCollection As ModulePermissionCollection = moduleInfo.ModulePermissions
_ASSIGN = ModulePermissionController.HasModulePermission(permCollection, PN_ASSIGN)
End Sub
Public ReadOnly Property ASSIGN As Boolean
Get
Return _ASSIGN
End Get
End Property
End Class
End Namespace
PermissionCode: This is the Group label for the permissions. All permissions for the module should have the same PermissionCode
PN_Assign: The nomenclature here is “Permission Name Assign”. I use this for each permission. Another permission might be PN_Retire – to retire an asset.
2. In your DotNetNuke database use this format and run the following query for each permission you create
Insert into Permission(PermissionCode, ModuleDefID, PermissionKey, PermissionName, ViewOrder, CreatedByUserID, CreatedOnDate, LastModifiedByUserID, LastModifiedOnDate)
Select '{PermissionCode}', ModuleDefID, '{PermissionKey}', '{PermissionName}', 10000, 1, GETDATE(), 1, GETDATE()
from ModuleDefinitions Where FriendlyName = '{Asset}'
For our example the query would like this:
Insert into Permission(PermissionCode, ModuleDefID, PermissionKey, PermissionName, ViewOrder, CreatedByUserID, CreatedOnDate, LastModifiedByUserID, LastModifiedOnDate) Select 'MYMOD_ASSET', ModuleDefID, 'ASSET_ASSIGN', 'Assign Asset', 10000, 1, GETDATE(), 1, GETDATE() from ModuleDefinitions Where FriendlyName = 'Asset'
The ViewOrder should start at 10000 because DotNetNuke reserves 0-9999 for DotNetNuke permissions.
3. To use the permission in your module put in some code like this:
'At Module level
Private msSecurity As ModuleSecurity
Private msAssign As Boolean = False
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
msSecurity = New ModuleSecurity(Me.ModuleConfiguration)
msAssign = Convert.ToBoolean(msSecurity.ASSIGN)
'on our page we have an ASP:Button called btnAssign
if msAssign Then btnAssign.Visible = False
End Sub
4. The last piece is set up the DotNetNuke module manifest to automatically insert the permissions into the database when the module is installed The manifest file should look like this:
<moduleDefinitions> <moduleDefinition> <moduleControls> --module definitions deleted for brevity---- </moduleControls> <permissions> <permission code="ATPI_ASSET" key="ASSET_ASSIGN" name="Assign Asset" /> </permissions> </moduleDefinition> </moduleDefinitions>
And that should do it. Now you’re permissions should show up in the Settings of your module with the DotNetNuke permissions, they should be accessible in your module, and they should automatically populate when the module is installed using the DotNetNuke Extension installer.
