在CodeAccessSecurityAttribute中检索目标元素

时间:2008-11-11 19:04:18

标签: c# security attributes

我意识到你无法在Attribute本身中获取目标实体,但在使用CodeAccessSecurityAttribute时,在关联的Permission对象中会怎样?在运行时调用Permission对象,所以似乎应该有办法,但我不知所措。

public sealed class MySecurityAttribute : CodeAccessSecurityAttribute
{
    public override IPermission CreatePermission()
    {
        MySecurityPermission permission = new MySecurityPermission();

        //set its properties
        permission.Name = this.Name;
        permission.Unrestricted = this.Unrestricted;
        return permission;
    }

}

public class MySecurityPermission : IPermission, IUnrestrictedPermission
{

    public MySecurityPermission(PermissionState state)
    {
           // what method was the attribute decorating that
           // created this MySecurityPermission?
    }

    public void Demand()
    {
           // Or here?
    }
}

2 个答案:

答案 0 :(得分:1)

走私电话堆栈怎么样?至少这会缩小你需要反思的范围。抓住System.Diagnostics.StackTrace并使用GetFrame将堆栈框架从您所在的位置提升一步。

虽然这是相当讨厌的 - 在我看来,CAS属性确实不应该取决于装饰的内容,而应该取决于它们参数中设置的条件。

答案 1 :(得分:0)

好吧,我猜你可以使用反射来扫描所有已加载的程序集,查找任何以this作为属性的类/成员。但是,它会很慢,所以这不是你想经常做的事情,也不是大项目。