Blazor阻止未经授权的用户执行POST操作



我正在使用Blazor服务器,我想阻止用户对应用程序进行更改。有些将具有writer和一些reader权限。

我有";全局";组件,这很好,因为我可以做这样的事情:

<AuthorizeView Policy="@Policies.HAS_WRITE_PERMISSIONS">
<Authorized>
<DxButton SizeMode="SizeMode.Large" SubmitFormOnClick="true" Text="@(IsSaving ? "Saving...":"Save" )" Enabled="!IsSaving && !Disabled"></DxButton>
</Authorized>
<NotAuthorized>
<br />
<i> You are not authoried to make any changes</i>
</NotAuthorized>
</AuthorizeView>
@code{
[Parameter]
public bool IsSaving { get; set; }
[Parameter]
public bool Disabled { get; set; }
}

然而,这并不妨碍我";聪明的";用户如何将按钮插入任何表单(例如使用Chrome开发工具(并点击Save

我不想只为读者制作特殊的视图,并重复数十个视图。我希望重用相同的视图(只是防止它们对数据进行任何更改(。

在Blazor中是否存在任何全局CCD_ 4动作拦截器或任何";全球";。

我尝试将属性放入方法,但这不起作用。

[Authorize(Policy = Policies.HAS_WRITE_PERMISSIONS)]
protected async Task HandleValidSubmit()

编辑:

我没有使用httpClient连接到后端(应用程序将始终是Blazor服务器,而不是Blazor WebAssembly(。我有联系";直接";到后端代码。

第2版:

当然,我可以制作CCD_ 5,它使用CCD_;全局";解决方案

protected async Task HandleValidSubmit()
{
if (await IdentityContext.HasWritePermissions() == false)
{
return;
}
...

也许它太简单了,但您想过使用简单级别的封装吗?创建一个方法来接受在用户具有正确权限的情况下应该发生的操作的委托?


public static class IdentiyContextExecuter
{
public static async Task<T> Execute<T>(Func<Task<T>> method, IdentityContext context)
{
if (await context.HasWritePermissions() == false)
{
return default;
}
T result = await method();
return result;
}
}

在您的submit方法或每个submit方法中,您都可以使用该类。

protected async Task HandleValidSubmit()
{
var result = await IdentiyContextExecuter.Execute(() => Task.FromResult(true), IdentityContext);
} 

它不是很优雅,但我想应该符合你的目的。您可以将其重写为IdentityContext类的扩展方法。类似ExecuteIfHasWritePermissions(...)

最新更新