【问题标题】:Blazor render specific content based on rolesBlazor 根据角色呈现特定内容
【发布时间】:2022-01-09 13:28:13
【问题描述】:
我有一个表格,我在其中循环浏览我的行项目模型。我想向角色中的用户显示一个删除按钮:Admin。如何在 Blazor 中执行此操作?
我试过了
<AuthorizeView Roles="Admin">
<MudButton> ADMIN ONLY BUTTON</MudButton>
</AuthorizeView>
现在,这一切似乎都运行良好,除了 AuthorizeView 改变了我的上下文。所以我现在失去了对我正在处理的模型的引用,所以现在我想添加一个 OnClick 侦听器以重定向到 device/delete/{@contenxt.DeviceId} 并且 VS 现在抱怨说上下文没有对 DeviceId 的引用
【问题讨论】:
标签:
authorization
blazor
blazor-webassembly
【解决方案1】:
重命名上下文之一以避免冲突:
<AuthorizedView Roles="Admin" Context="SomeOtherName" >
<MudButton> ADMIN ONLY BUTTON</MudButton>
</AuthorizedView>
【解决方案2】:
这个答案是在做一个假设 - AuthorizedView 是一种类型,你的意思是 AuthorizeView 而不是一些自定义的 AuthorizedView 组件。
AuthorizeView 将其内容的上下文设置为当前的AuthenticationState。因此 {@contenxt.DeviceId} 不起作用 - AuthenticationState 上没有 DeviceId。
由于您没有为您的问题提供太多“背景” - 为双关语道歉! - 我假设您正在遍历列表并为每条记录显示一个编辑按钮。如果是这样,您可以在 AuthorizeView 之外为您的上下文设置一个局部循环变量,然后在您的按钮调用中引用它。
类似:
@{
var device = context;
}
<AuthorizedView Roles="Admin">
<MudButton @onclick="() => GotToEdit(device.DeviceId)"> ADMIN ONLY BUTTON</MudButton>
</AuthorizedView>