appdomain может быть ограничен одним каталогом?

Я разрабатываю сменный хост. Плагины должны иметь такое небольшое доверие, как им нужно, однако я хочу иметь возможность для плагина, чтобы считать и записать файлы.

Может AppDomain, где блок будет загружен быть ограниченным, чтобы иметь доступ только к одному каталогу для чтения и записи?

Другие опции и способы пойти об этом также ценятся как, например, простые способы передать данные файла потоком от хоста до сменного (чтение) и от плагина до хоста (запись).

Если его соответствующее: Я использую инфраструктуру MAF для плагинов. http://msdn.microsoft.com/en-us/library/bb384200.aspx

6
задан John Saunders 19 May 2010 в 22:45
поделиться

1 ответ

namespace ConsoleApplication
{
    #region Imports

    using System;
    using System.IO;
    using System.Security;
    using System.Security.Permissions;

    #endregion

    public class Plugin : MarshalByRefObject
    {        
        public string TestRead(string path)
        {
            try
            {
                File.ReadAllBytes(path);
                return "Done";
            }
            catch (SecurityException)
            {
                return "Access Denied";
            }
        }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            var setup = new AppDomainSetup();

            setup.ApplicationBase = 
                AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

            var perm = new PermissionSet(PermissionState.None);

            perm.AddPermission(
                new SecurityPermission(
                    SecurityPermissionFlag.Execution));

            perm.AddPermission(
                new FileIOPermission(
                    FileIOPermissionAccess.Read, "c:\\public\\"));

            var pluginDomain = 
                AppDomain.CreateDomain("PluginDomain", null, setup, perm);

            var plugin = 
                pluginDomain.CreateInstanceAndUnwrap(
                    typeof(Plugin).Assembly.FullName,
                    typeof(Plugin).FullName) as Plugin;

            Console.WriteLine(plugin.TestRead("c:\\public\\test.txt"));
            Console.WriteLine(plugin.TestRead("c:\\secret\\test.txt"));
            Console.ReadKey();
        }
    }
}
6
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: