Dive Calendar   Social Calendar   Gallery   Newsletters
Register  |  Login
 
DotNetNuke Blog

Current Articles | | Search |

Configuring Permissions Grid to Enable Moderator Role Allocation

The current version of the Events Module (4.0.1) uses a method which appears to be no longer supported in DNN5. So to make it work, a new mechanism is required. Fortunately DNN already has an extensible Permissions Grid which is very easy to configure.

This is run from IUpgradeable:-

'Lookup DesktopModuleID
objDesktopModule = objDesktopModules.GetDesktopModuleByModuleName("DNN_Events")


If Version = "04.00.02" Then
    Dim objModuleDefinitions As New DotNetNuke.Entities.Modules.Definitions.ModuleDefinitionController
    Dim objModuleDefinition As DotNetNuke.Entities.Modules.Definitions.ModuleDefinitionInfo
    'Lookup ModuleDefID
    objModuleDefinition = objModuleDefinitions.GetModuleDefinitionByName(objDesktopModule.DesktopModuleID, "Events")
    Dim objPermissionController As New DotNetNuke.Security.Permissions.PermissionController
    Dim objPermission As New DotNetNuke.Security.Permissions.PermissionInfo
    objPermission.ModuleDefID = objModuleDefinition.ModuleDefID
    objPermission.PermissionCode = "EVENTS_MODULE"
    objPermission.PermissionKey = "EVENTSMOD"
    objPermission.PermissionName = "Events Moderator"
    objPermissionController.AddPermission(objPermission)
    Dim objEventCtl As New EventController
    objEventCtl.EventsUpgrade()
End If

 

To add the appropriate entries to the core tables, the following EventsUpgrade stored procedure looks like this:-

This adds the appropriate entries to the Permissions table to make the extra options available in the Grid. Then adds the roles previously configured in the EventsSettings to the ModulePermission table so existing configurations are maintained. Then deletes the out of date settings from the ModuleSettings table.

 

/*** EventsUpgrade ***/

if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}EventsUpgrade]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure {databaseOwner}[{objectQualifier}EventsUpgrade]
GO

CREATE PROCEDURE {databaseOwner}{objectQualifier}EventsUpgrade

AS

-- Copy over Moderators from ModuleSettings

INSERT INTO {databaseOwner}{objectQualifier}ModulePermission
        (
        RoleID,
        ModuleID,
        PermissionID,
        AllowAccess
        )
SELECT    {databaseOwner}{objectQualifier}ModuleSettings.SettingValue AS RoleID,
        {databaseOwner}{objectQualifier}ModuleSettings.ModuleID,
        {databaseOwner}{objectQualifier}Permission.PermissionID,
        - 1 AS AllowAccess
FROM    {databaseOwner}{objectQualifier}ModuleSettings INNER JOIN
        {databaseOwner}{objectQualifier}Modules ON {databaseOwner}{objectQualifier}ModuleSettings.ModuleID = {databaseOwner}{objectQualifier}Modules.ModuleID INNER JOIN
        {databaseOwner}{objectQualifier}ModuleDefinitions ON {databaseOwner}{objectQualifier}Modules.ModuleDefID = {databaseOwner}{objectQualifier}ModuleDefinitions.ModuleDefID CROSS JOIN
        {databaseOwner}{objectQualifier}Permission
WHERE   ({databaseOwner}{objectQualifier}ModuleSettings.SettingName = 'moderatorroleid') AND
        ({databaseOwner}{objectQualifier}ModuleSettings.SettingValue <> '0') AND
        ({databaseOwner}{objectQualifier}ModuleDefinitions.FriendlyName = N'Events') AND
        ({databaseOwner}{objectQualifier}Permission.PermissionCode = 'EVENTS_MODULE') AND
        ({databaseOwner}{objectQualifier}Permission.PermissionKey = 'EVENTSMOD')

-- Ensure Moderators have edit permissions

INSERT INTO {databaseOwner}{objectQualifier}ModulePermission
        (
        RoleID,
        ModuleID,
        PermissionID,
        AllowAccess
        )
SELECT  MP1.RoleID, MP1.ModuleID, P3.PermissionID, - 1 AS AllowAcces
FROM    {databaseOwner}{objectQualifier}ModulePermission AS MP1 INNER JOIN
        {databaseOwner}{objectQualifier}Permission AS P1 ON MP1.PermissionID = P1.PermissionID CROSS JOIN
        {databaseOwner}{objectQualifier}Permission AS P3
WHERE   (P1.PermissionCode = 'Events_Module') AND (P1.PermissionKey = 'EVENTSMOD') AND (MP1.RoleID NOT IN
        (SELECT    MP2.RoleID
         FROM   {databaseOwner}{objectQualifier}ModulePermission AS MP2 INNER JOIN
                {databaseOwner}{objectQualifier}Permission AS P2 ON MP2.PermissionID = P2.PermissionID INNER JOIN
                {databaseOwner}{objectQualifier}Modules AS M2 ON MP2.ModuleID = M2.ModuleID INNER JOIN
                {databaseOwner}{objectQualifier}ModuleDefinitions AS MD2 ON M2.ModuleDefID = MD2.ModuleDefID
         WHERE  (P2.PermissionCode = 'SYSTEM_MODULE_DEFINITION') AND (P2.PermissionKey = 'EDIT') AND (MD2.FriendlyName = N'Events') AND
                (M2.ModuleID = MP1.ModuleID))) AND (P3.PermissionCode = 'SYSTEM_MODULE_DEFINITION') AND (P3.PermissionKey = 'EDIT')

-- Delete Moderator settings from ModuleSettings

DELETE FROM {databaseOwner}{objectQualifier}ModuleSettings
FROM        {databaseOwner}{objectQualifier}ModuleSettings INNER JOIN
            {databaseOwner}{objectQualifier}Modules ON {databaseOwner}{objectQualifier}ModuleSettings.ModuleID = {databaseOwner}{objectQualifier}Modules.ModuleID INNER JOIN
            {databaseOwner}{objectQualifier}ModuleDefinitions ON {databaseOwner}{objectQualifier}Modules.ModuleDefID = {databaseOwner}{objectQualifier}ModuleDefinitions.ModuleDefID
WHERE       ({databaseOwner}{objectQualifier}ModuleSettings.SettingName = 'moderatorroleid') AND ({databaseOwner}{objectQualifier}ModuleDefinitions.FriendlyName = N'Events')

GO

Then the IsModerator function in EventBase can then be changed to the following.

Public Function IsModerator() As Boolean
    Try
        Dim mc As New DotNetNuke.Entities.Modules.ModuleController
        Dim objMod As New DotNetNuke.Entities.Modules.ModuleInfo
        Dim mp As New DotNetNuke.Security.Permissions.ModulePermissionCollection

        objMod = mc.GetModule(ModuleId, TabId, False)

        If Not objMod Is Nothing Then
            mp = objMod.ModulePermissions
            Return Permissions.ModulePermissionController.HasModulePermission(mp, "EVENTSMOD")
        Else
            Return False
        End If

    Catch
    End Try
    Return False
End Function

All that remains to be done after that is to strip out the code that relates to 'moderatorroleid'.

You end up with a table like this in Module Settings, which as you can see allows multiple roles and individual users to become Moderators.

image

posted @ 12 June 2008 17:21 by Roger Selwyn

Previous Page | Next Page

COMMENTS

Name (required)

Email (required)

Website

Enter the code shown above:

Print