4

我正在为 DNN 7.1+ 开发一个模块,我需要根据用户是否具有该模块的编辑权限来显示/隐藏模块中的链接。无论页面是否处于编辑模式,我都希望这种情况发生。

目前我在自定义模块页面加载事件的view.ascx中有以下代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Try
        ''other code goes here.......
        If IsEditable = True Then
            AdminEdit.Visible = True
        Else
            AdminEdit.Visible = False
        End If
    Catch exc As Exception
        Exceptions.ProcessModuleLoadException(Me, exc)
    End Try

End Sub

AdminEdit是我要隐藏的元素的 ID。此代码在页面处于编辑模式时有效,但我希望它始终可见,无论编辑模式如何,如果用户对该模块具有编辑权限。

现在,如果页面未处于编辑模式,则 IsEditbale 返回 false。

问题:如何在页面不处于编辑模式的情况下检查用户权限?

编辑:我也很乐意检查用户对包含模块的页面的编辑权限

解决方案:

多亏了 bdukes,我得到了以下结果:

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        Try

            ''display template selector if user has edit rights over module
            If DotNetNuke.Security.Permissions.ModulePermissionController.CanEditModuleContent(Me.ModuleConfiguration) Then
                AdminEdit.Visible = True
            Else
                AdminEdit.Visible = False
            End If
        Catch exc As Exception
            Exceptions.ProcessModuleLoadException(Me, exc)
        End Try

    End Sub
4

1 回答 1

8

所做IsEditable的只是告诉您是否处于编辑模式。要检查权限,请使用DotNetNuke.Security.Permissions.ModulePermissionController.CanEditModuleContent(modInfo).

检查当前用户以外的用户的权限相当麻烦和脆弱。在基本层面上,您可以调用PortalSecurity.IsInRoles并按照示例PermissionProvider传入modInfo.ModulePermissions.ToString("EDIT")。但是,"EDIT"这里是权限提供者中定义的一个值,并且 Evoq 使用不同的权限提供者(为了提供更细化的权限),因此不同的环境可能有不同的权限您要检查。

于 2013-12-10T15:18:01.380 回答