Разные разрешения безопасности для нескольких сборок в одном домене приложения - PullRequest
0 голосов
/ 07 августа 2011

Можно ли загрузить несколько сборок в новый домен приложений и применить разные PermissionSet к каждой?

Скажем, разрешить одной из сборок выполнять запись на диск, предоставив ей неограниченную FileIOPermission и отказав в таком разрешении другим (и).

Если это возможно. Как?

Обновление

P.S. Я создаю экземпляры типов из DLL, не выполняющих exe, поэтому я использую Load и CreateInstanceAndUnwrap вместо ExecuteAssembly.

Обновление

Я пытался (и не смог) предоставить подтверждение методом load со следующим кодом:

Dim domain As AppDomain = AppDomain.CreateDomain("AssembliesDomain")
Dim protectedSet As New PermissionSet(PermissionState.None)

protectedSet.AddPermission(New SecurityPermission(SecurityPermissionFlag.Execution))
protectedSet.AddPermission(New IsolatedStorageFilePermission(PermissionState.Unrestricted))
protectedSet.PermitOnly()

domain.Load(protectedAssembly, New Evidence(Nothing, {protectedSet}))
domain.Load(unprotectedAssembly, New Evidence(Nothing, {protectedSet}))

Console.WriteLine(domain.CreateInstanceAndUnwrap(protectedAssembly, protectedAssembly & ".Actions").Sum(1, 2))
Console.WriteLine(domain.CreateInstanceAndUnwrap(unprotectedAssembly, unprotectedAssembly & ".Actions").Sum(1, 2))
Console.ReadLine()

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Добавьте эту строку (чтобы обойти исключение, которое вы получаете):

protectedSet.AddPermission(new UIPermission(PermissionState.Unrestricted)); 

Полезная статья: http://www.reliablesoftware.com/articles/UnderstandingSecurityActions.html

0 голосов
/ 07 августа 2011

Вы можете либо указать пользовательский объект Evidence при использовании метода Assembly.Load для создания экземпляра одной из ваших пользовательских сборок, либо посмотреть здесь

...