【问题标题】:How to apply custom CodeAccessSecurityAttribute to a Property?如何将自定义 CodeAccessSecurityAttribute 应用于属性?
【发布时间】:2015-08-14 00:17:53
【问题描述】:

我正在尝试实现自定义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)
{

}

我需要做什么才能将此自定义属性应用于属性?

【问题讨论】:

    标签: c# custom-attributes


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多