反射获取定制Attribute
前段时间写了扩展.net安全机制(1, 2),当时做了些试验代码,关于用户权限控制的功能是没有问题的,但关于权限管理却没有做实际的代码进行试验。当时想当然的认为可以通过反射机制读取到定制安全属性的内容,这几天开始做实际的代码,却发现并没有这么简单。
我的目标是这样的,打开一个dll文件,通过反射得到其所有类和方法,并调用GetCustomAttributes方法获取其Attribute,然后读取这些Attribute记录的数据并入库管理。可是,现在发现GetCustomAttributes方法好像不能得到从CodeAccessSecurityAttribute继承的属性。我尝试了自己定义的安全Attribute和.net提供的PrincipalPermissionAttribute,都不行。用.NET Reflector看了一下反编译后的代码,发现这些Attribute变成了PermissionSetAttribute。可是,既然Reflector可以看到PermissionSetAttribute,那么我自己的代码通过反射应该至少也可以看到这个啊,看来还需要继续研究。
不过,就目前情况,也有个不太完美的解决方案,就是除了安全Attribute,再定义一个普通的定制Attribute,记录需要管理的信息,这个普通的Attribute是可以通过GetCustomAttributes得到的,这个我已经试验过。这个方案不完美的地方就是要为需要安全控制的对象加两个Attribute,而且要保证其内容一致。确实不完美,不过可以用,也许只能采用这个方案了。
我的目标是这样的,打开一个dll文件,通过反射得到其所有类和方法,并调用GetCustomAttributes方法获取其Attribute,然后读取这些Attribute记录的数据并入库管理。可是,现在发现GetCustomAttributes方法好像不能得到从CodeAccessSecurityAttribute继承的属性。我尝试了自己定义的安全Attribute和.net提供的PrincipalPermissionAttribute,都不行。用.NET Reflector看了一下反编译后的代码,发现这些Attribute变成了PermissionSetAttribute。可是,既然Reflector可以看到PermissionSetAttribute,那么我自己的代码通过反射应该至少也可以看到这个啊,看来还需要继续研究。
不过,就目前情况,也有个不太完美的解决方案,就是除了安全Attribute,再定义一个普通的定制Attribute,记录需要管理的信息,这个普通的Attribute是可以通过GetCustomAttributes得到的,这个我已经试验过。这个方案不完美的地方就是要为需要安全控制的对象加两个Attribute,而且要保证其内容一致。确实不完美,不过可以用,也许只能采用这个方案了。
posted on 2004-06-01 11:38 vibration 阅读(1824) 评论(0) 编辑 收藏 举报