Как изменить разрешения AppDomain? - PullRequest
2 голосов
/ 12 ноября 2011

Я использую специальный метод для создания sandobx:

internal static class Helper
{
    public static AppDomain CreateSandbox()
    {
        Contract.Ensures(Contract.Result<AppDomain>() != null);

        var platform = Assembly.GetExecutingAssembly();
        var name = platform.FullName + ": Sandbox " + Guid.NewGuid();
        var setup = new AppDomainSetup { ApplicationBase = platform.Location };
        var permissions = new PermissionSet(PermissionState.None);
        permissions.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, platform.Location));
        var sandbox = AppDomain.CreateDomain(name, null, setup, permissions);

        Contract.Assume(sandbox != null);

        return sandbox;
    }
}

Когда я использую созданную песочницу, я хочу изменить разрешения для нее:

sandbox = Security.Helper.CreateSandbox();
sandbox.SetupInformation.ApplicationBase = Path.GetDirectoryName(path);
sandbox.PermissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, path));

Но когда я загружаю сборку в нее, Я получаю исключение:

" Запрос на разрешение типа 'System.Security.Permissions.FileIOPermission, mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089' не выполнен.* "

Как изменить разрешения AppDomain ПОСЛЕ его создания?

1 Ответ

4 голосов
/ 21 ноября 2011

В однородном AppDomain единственными разрешенными наборами разрешений являются FullTrust и набор разрешений, определенные при создании домена. После предоставления набор разрешений больше не может быть расширен (AFAIK). Держите плагины изолированными, привязанными к PermissionSet, который вы определили при создании настраиваемого домена приложений, и предоставьте расширенные функциональные возможности (для которых требуются повышенные разрешения) с помощью широко используемой безопасной критически важной библиотеки классов.

Смотрите также ответы и подсказки здесь: http://social.msdn.microsoft.com/Forums/en-US/clr/thread/23a9197e-3581-4a28-912d-968004488773

...