我正在阅读有关MSDN上的代表的信息,并看到一行
“注意:代表在调用者的安全权限下运行,而不在声明者的权限下运行”
这意味着什么?
假设问题与Windows权限有关,而不是.Net代码访问安全性(CAS)。
创建委托(即框管理员)时无论运行什么帐户代码,都将在实际调用时计算Windows权限-这可能与创建时的权限不同。
假设您运行的代码执行模拟帐户(Windows用户)以访问某些文件:
// run under "account1" - has access to c:\myFile.txt
// current Environment.UserName = "account2"
Func<string,string> readAllFile = fileName => File.ReadAllText(fileName);
// start impersonation of account2 - has access to c:\otherFile.txt,
// but not c:\myFile.txt
ImpersonateAccount("account2", readAllFile);
....
...ImpersonateAccout(string name, Func<string,string> readAllFile)
{
// .... impersonation code omitted
// current Environment.UserName = "account2"
var text1 = readAllFile(@"c:\otherFile.txt"); // success
var text2 = readAllFile(@"c:\myFile.txt"); // failure
....
在上面的示例中readAllFile
,代码是在下运行时创建的account1
,但是没有“捕获”该帐户的权限,因此以后的委托无法读取c:\myFile.txt
哪个“ account2”没有权限。
请注意,委托像本地变量一样“捕获” C#级上下文,这可能带来以下假设:也捕获了其他类型的上下文。对于Window安全上下文以及.Net执行上下文(例如当前线程的区域性)而言,情况并非如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句