是否可以使 Razor Tag Helper 在某些服务器端条件下显示/隐藏包裹在其中的内容

问题描述

确实按照标题,但要提供更多细节:

我的网络应用有多个用户,每个用户都有一组不同的权限,这意味着应用的某些部分对他们不可用,在大多数情况下这很简单,整个部分只是被屏蔽不显示在全部,但在某些情况下,我希望能够将页面的某个部分包装在一个标签中,如果用户无权查看,将完全隐藏该部分,或者显示“您没有权限使用这个位”部分视图。

我使用的是 .NET Core 3.1 和 Razor Pages。

所以我在想这样的事情:

<html>
<body>
    My web page content....
    <permission requires="view_invoices">
        <h3>Invoices</h3>
        .... invoice content.... 
        BUT - if user has not got permission this section is skipped,so is blank,or shows (/Views/Partial/PermissionNotAvailable)
    </permission>
</body>
</html>

编辑 - 为清楚起见,我希望能够在假设用户有权查看的情况下编写我的内容,但如果他们没有权限,则它包含在 permissions 标签助手中的事实将具有它被服务器端助手删除或替换。

解决方法

如果您使用 ASP.NET authorization 和 razor 页面,您可以执行以下操作:

@if (User.IsInRole("ViewInvoices")) {
    <h3>Invoices</h3>
    .... invoice content.... 
} else {
    (/Views/Partial/PermissionNotAvailable)
}

其中 ViewInvoices 是您添加到数据库并分配给某些用户的角色。如果用户没有此角色,则页面的该部分不会返回给客户端。