我有一个简单的应用程序分成三个程序集。一种是允许用户从注册表中读取密钥的客户端表单。第二个是用户登录的授权表单。第三个是一个 .dll 库,其中包含执行实际工作的所有方法。
我遵循了关于执行声明性安全检查的 MSDN 教程,在此处找到http://msdn.microsoft.com/en-us/library/dswfd229.aspx,但仍然无法正常工作。
我像这样创建 GenericPrincipal 对象:
public static void CreatePrincipal(string user)
{
GenericIdentity MyIdentity = new GenericIdentity(user);
String[] MyString = { "Administrator", "User" };
GenericPrincipal MyPrincipal =
new GenericPrincipal(MyIdentity, MyString);
Thread.CurrentPrincipal = MyPrincipal;
}
它位于 .dll 程序集中的 CustomPrincipal 类中。
在同一个程序集中,我有一个 RegistryOperations 类,其方法如下:
[PrincipalPermissionAttribute(SecurityAction.Demand, Name = "admin1", Role = "User")]
public static string ReadDeclarative()
{
...
}
没有什么花哨。在我的“授权”程序集中,我有一个需要 .dll 授权方法的 GUI:
private void btnLogin_Click(object sender, EventArgs e)
{
CustomPrincipal.CreatePrincipal(txtUsername.Text);
}
最后,在第三个“客户端”程序集中,我调用了 .dll 方法来读取注册表项:
private void btnReadRegistry_Click(object sender, EventArgs e)
{
txtContents.Text = RegistryOperations.ReadDeclarative();
}
这行不通。我通过授权程序集登录,当我尝试读取注册表时,我收到请求主体权限失败。Visual Studio 建议将程序集添加到一些神秘的完全信任列表中,但在 VS2010 中找不到。请指教。