为什么授权属性策略参数仅限于 const?



为什么授权属性策略参数仅限于常量"编译时"?

因为这个限制不允许使用像下面的例子这样的字符串连接,所以有什么理由限制它。

[Authorize($"{Privilege1},{Privilege2}")]
[HttpPost()]
public async Task<IActionResult> Testpost()
{
return Ok();
}

是的,遗憾的是您不能在常量中使用字符串插值,您必须在Authorize等属性中使用常量。内插字符串在运行时内插,需要在编译时创建常量。

但是,您可以通过这种方式连接字符串,编译器将能够将其转换为常量:

private const string privilege1 = "Privilege1";
private const string privilege2 = "Privilege2";
[Authorize(privilege1 + "," + privilege2)]
[HttpPost()]
public async Task<IActionResult> Testpost()
{
return Ok();
}

必须在编译时知道属性参数才能将其放入程序集元数据中。这就是属性的工作原理。在您的情况下,${}表示该值仅在运行时已知。

这与串联无关,您可以安全地在那里拥有"a" + ",b",这显然是一个串联,但仍使用编译时已知的字符串值。

尝试创建自己的安全策略或继承AuthorizeAttribute。在自定义逻辑中,可以引用任何角色(静态或动态(。

最新更新