gpt4 book ai didi

.net - 您可以在运行时评估方法的属性吗?

转载 作者:行者123 更新时间:2023-12-03 10:18:36 25 4
gpt4 key购买 nike

我有一个宽松地基于MVVM的Winforms项目。域层使用PrincipalPermissionAttribute来实现安全性,如下所示:

Public Class Order

<PrincipalPermissionAttribute(SecurityAction.Demand, Role:="Managers")> _
Public Sub ChangeBillingAddress(NewAddress as Address)

Me.BillingAddress = NewAddress

End Sub


End Class

我希望ViewModel能够根据域中的PrincipalPermissionAttribute指示要启用/禁用哪些控件的 View :
Public Class OrderViewModel

Private _Order as Order
Public Sub New(Order as Order)
_Order = Order
End Sub

Public Readonly Property ChangeBillingAddressEnabled as Boolean
Get
'Here I want to take Thread.CurrentPrincipal and evaluate
'it's Role against the PrincipalPermissionAttribute on
'_Order.ChangeBillingAddress. If the user will succeed
'in changing the billing address return True, else return False.
End Get

End Property
End Class

ViewModel是否可以评估PrincipalPermissionAttribute并确定当前Thread.Principal是否成功?

最佳答案

是的,您绝对可以获取方法上的属性并对其进行处理。

例如(对不起,C#):

return _Order.GetType()
.GetMethod("ChangeBillingAddress")
.GetCustomAttributes(typeof(PrincipalPermissionAttribute), true)
.Cast<PrincipalPermissionAttribute>()
.All(r => IsPermittedAccess(r, Thread.CurrentPrincipal));

在哪里可以计算该属性的作用:
bool IsPermittedAccess(PrincipalPermissionAttribute rule, IPrincipal user)
{
// return ?
throw new NotImplementedException();
}

我将剩下最后一个任务,即确定用户是否满足属性要求。我对框架的那部分还不够熟悉。您还可以处理错误处理(例如,该名称不存在method)。

我还要补充一点,您可能想要缓存(也许在静态字段中?)方法反射的结果,因为它永远不会改变。您还需要确保您的 View 模型在主体更改或主体的角色集合更改时(即,如果确实发生了更改)触发属性更改通知。

关于.net - 您可以在运行时评估方法的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com