如何将自定义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应用于属性

我也碰到了这个问题。不幸的是,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