基于查询字符串的Blazor WASM授权属性


@attribute [Authorize(Roles = "Admin")]
@attribute [Authorize(Roles = NavigationManager.QueryString("level"))]

我已经在我的页面级别添加了这段代码,第一个授权属性工作得很好,因为它只是一个常量值"Admin"但不是第二个authorize属性。

我试图根据查询字符串授予访问权限,但此代码NavigationManager.QueryString("level")将有此错误非静态字段、方法或属性"成员"需要对象引用">

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs0120?f1url=%3FappId%3Droslyn%26k%3Dk (CS0120)

有办法解决这个问题吗?

简短的回答:你不能这么做。属性参数需要是编译时常数。

长话短说:不要这样做。使用查询字符串检查授权本质上是不安全的。

如果您有复杂的授权,请检查基于策略的授权。总的来说,这是一个很好的解释。查看更多Blazor WASM特定示例