我有一个用ClaimsPrincipalPermissionAttribute修饰的方法,如下所示:
[ClaimsPrincipalPermission(SecurityAction.Demand,
Resource = "User",
Operation = "accountId")]
IList<Transaction> ViewTransaction(int accountId)
{
// some code
}
是否有将 ViewTransaction 的 accoutId参数传递给 ClaimsPrincipalPermission Operation ?
我想要的是使用 accountId ,然后在ClaimsAuthorizationManager中实现自定义逻辑。
答案 0 :(得分:3)
属性在编译时期望值为常量。因此,您无法将动态值传递给属性并期望它进行编译。你不得不采取一些反思来让它做你想做的事。
var method = typeof(YourClassType).GetMethod("ViewTransaction");
var attribute = method.GetCustomAttribute(typeof(ClaimsPrincipalPermission)) as ClaimsPrincipalPermission;
attribute.AccountId = 1234;
您需要为您的属性公开另一个属性,即AccountId 对于这种类型的方法显然存在一些担忧,在进行此操作之前应该进行大量权衡。确保您必须将此类信息传递给您的属性。
或者,如果您的方法位于MVC控制器内部,则可以从过滤器上下文中访问值提供程序,如本答案中所述。
ASP MVC C#: Is it possible to pass dynamic values into an attribute?