【问题标题】:Only show parts of an .ascx template's HTML to administrators (nobody else) using <% %> or equivalent仅使用 <% %> 或等价物向管理员(没有其他人)显示 .ascx 模板的 HTML 的一部分
【发布时间】:2013-04-11 10:04:19
【问题描述】:

我在客户的 DotNetNuke 网站上远程工作,扩展现有的 HTML 模板。客户要求在审核之前必须隐藏这些新内容。

有没有一种方法可以隐藏模板的部分 HTML 并仅向管理员显示?

理想情况下,我正在寻找这样的东西:

<div>
    <% Admin Only %>
        <p>Only administrators can see this!</p>
    <% End Admin Only %>
    <p>Everyone can see this</p>
</div>

(我对 ASP.NET 不是很熟悉,所以我不确定 表示法是什么。)

这可能吗?

【问题讨论】:

    标签: asp.net dotnetnuke


    【解决方案1】:

    创建一个方法并使用如下所示的 ASP.NET 内联表达式调用此方法。

    IF 语言是 VB

    <script runat="server">
        Public Function IsUserAdmin() As Boolean
            Dim uinfo As DotNetNuke.Entities.Users.UserInfo = DotNetNuke.Entities.Users.UserController.GetCurrentUserInfo()
            If uinfo.UserID <> -1 Then
                If uinfo.IsInRole(DotNetNuke.Entities.Portals.PortalSettings.Current.AdministratorRoleName) Then
                    Return True
                Else
                    Return False
                End If
            Else
                Return False
            End If
    
        End Function
    </script>
    

    而 ASP.NET 内联表达式是

    <%  If IsUserAdmin() Then%>
           <p>Only administrators can see this!</p>
        <%  End If%>
    

    如果语言是C#

    <script runat="server">
        public bool IsUserAdmin()
        {
            DotNetNuke.Entities.Users.UserInfo uinfo = DotNetNuke.Entities.Users.UserController.GetCurrentUserInfo();
            if (uinfo.UserID != -1)
            {
                if (uinfo.IsInRole(DotNetNuke.Entities.Portals.PortalSettings.Current.AdministratorRoleName))
                    return true;
                else
                    return false;
            }
            else
            {
                return false;
            }
    
        }
    </script>
    

    而 ASP.NET 内联表达式是

    <% if (IsUserAdmin()) %>
        <%
           { %>
           <p>Only administrators can see this!</p>
        <% } %>
    

    【讨论】:

    • 这引发了错误:Could Not Load Skin: /Portals/.../index.ascx, Error: C:\inetpub\wwwroot\...\index.ascx(144): error BC30205: End of statement expected. 第 144 行是 public bool IsUserAdmin()
    • @James 你的控制语言 c# 或 vb 是什么
    • 我想应该是 C#,因为我工作的公司通常使用 C#,但我不完全确定。除了 .ascx 模板文件之外,有没有一种方法可以让我在没有访问权限的情况下找出答案?
    • 是的,你可以在 .ascx 文件中找到,查看 .ascx 文件的顶部。它会像这样 跨度>
    • 啊,是VB。 language="vb".
    【解决方案2】:

    试试这个,必要时替换用于确定角色成员资格和是否审查内容的代码:

    <div>
        <% if (Page.User.IsInRole("administrator") || objContent.IsReviewed)
         {%>
            <p>Only administrators can see this!</p>
        <% }%>
        <p>Everyone can see this</p>
    </div>
    

    其实DNN就是VB吧?如果是这样:

    <div>
        <% If Page.User.IsInRole("administrator") Or objContent.IsReviewed Then%>
            <p>Only administrators can see this!</p>
        <% End If%>
        <p>Everyone can see this</p>
    </div>
    

    【讨论】:

    • C#的解决方案断了页面,所以一定是VB。 VB 解决方案没有改变任何东西——无论我是否登录,我仍然能够看到它。
    • 是的,还以为是VB。您确定您已注销并且内容未被“审核”吗?我在这里的测试应用确实隐藏了管理员专用的消息。
    • 我只使用Page.User.IsInRole("administrator") 进行了尝试,但在注销时(以及清除 cookie 后)内容仍然显示。
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2021-06-26
    • 2013-01-11
    相关资源
    最近更新 更多