У меня есть простое приложение, разбитое на три сборки.Одним из них является клиентская форма, которая позволяет пользователю читать ключ из реестра.Второй - это форма авторизации, через которую пользователь входит в систему. Третий - библиотека .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;
}
Он находится в классе CustomPrincipal в сборке .dll.
Вв той же сборке у меня есть класс RegistryOperations со следующим методом:
[PrincipalPermissionAttribute(SecurityAction.Demand, Name = "admin1", Role = "User")]
public static string ReadDeclarative()
{
...
}
Ничего особенного.В моей сборке «Авторизация» у меня есть графический интерфейс, который вызывает метод .dll для авторизации:
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.Пожалуйста, сообщите.