Я разрабатываю сменный хост. Плагины должны иметь такое небольшое доверие, как им нужно, однако я хочу иметь возможность для плагина, чтобы считать и записать файлы.
Может AppDomain, где блок будет загружен быть ограниченным, чтобы иметь доступ только к одному каталогу для чтения и записи?
Другие опции и способы пойти об этом также ценятся как, например, простые способы передать данные файла потоком от хоста до сменного (чтение) и от плагина до хоста (запись).
Если его соответствующее: Я использую инфраструктуру MAF для плагинов. http://msdn.microsoft.com/en-us/library/bb384200.aspx
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();
}
}
}