如何将自定义CodeAccessSecurityAttribute应用于属性
本文关键字:应用于 属性 CodeAccessSecurityAttribute 自定义 | 更新日期: 2023-09-27 18:07:56
我正在尝试实现自定义CodeAccessSecurityAttribute
,如下所示:
[AttributeUsage(AttributeTargets.Property)]
public class AuthoriseAttribute : System.Security.Permissions.CodeAccessSecurityAttribute
{
// custom security implementation
}
我想限制对一个属性的访问,例如:
public class Dashboard : Page
{
[Authorise(SecurityAction.Demand)]
public List<RedirectNameValueBo> ClientsContractExpiring
{
set
{
this.ctlClientContractExpiry.ItemList = value;
this.ctlClientContractExpiry.Visible = true;
}
}
}
但是我得到错误:
Error emitting 'Namespace.AuthoriseAttribute' attribute -- 'Security custom attribute attached to invalid parent.'
为了记录,如果我将AttributeUsage
更改为AttributeTargets.Method
,并将该属性应用于方法,它可以正常工作,例如:
[AttributeUsage(AttributeTargets.Method)]
public class AuthoriseAttribute : System.Security.Permissions.CodeAccessSecurityAttribute
{
// custom security implementation
}
[Authorise(SecurityAction.Demand)]
protected void Page_Load(object sender, EventArgs e)
{
}
我需要做什么才能将此自定义属性应用于属性?
我也碰到了这个问题。不幸的是,CodeAccessSecurityAttribute及其派生的所有内容都不能应用于属性。但是有一个简单的解决方法:将该属性应用于所需属性的getter和/或setter——getter和setter是底层的方法。我给你的例子是Visual Basic . net,你应该能够把它翻译成c#。
'This does not work:
<PrincipalPermission(SecurityAction.Demand, Role:="Administrator")>
Public Property IsEnabled As Boolean
'This works:
Private _isEnabled As Boolean
Public Property IsEnabled As Boolean
<PrincipalPermission(SecurityAction.Demand, Role:="Administrator")>
Get
Return _isEnabled
End Get
<PrincipalPermission(SecurityAction.Demand, Role:="Administrator")>
Set (value As Boolean)
_isEnabled = value
End Set
End Property