2011-09-02 121 views
1

我有一个应用程序可以将一些数据存储在独立存储中。数据与Machine-Assembly范围一起存储,以便给定机器上的所有用户都可以访问这些数据。独立存储访问权限

一切似乎都在管理员帐户工作得很好,但只要我们在来宾帐户测试我们的应用程序时,我们遇到用户权限限制。看起来孤立的存储,只是由操作系统生成的简单文件夹,可以对用户访问这些文件夹有一些限制。

在默认情况下,我的情况下guest帐户已读/写权限设置,但只要我们试图删除已划入下管理员帐户存储,因为来宾帐户没有我们遇到了一个异常文件有权删除其他用户创建的文件。

因此,我们得到一个崩溃每次客人尝试使用一些在应用程序需要由其他用户创建的文件删除功能。

我想也许我可以尝试检查访客在尝试进行删除之前拥有什么权限,并警告他由于他没有足够的权限而无法使用这些功能,但是由于通向隔离的路径存储是由操作系统生成的,没有办法找到它(除了完全遍历文件系统),所以无法检查访客帐户拥有哪些权限。

也许有人对此有什么建议?

+0

为什么客人需要删除其他用户创建的文件? –

回答

0

由于路径独立存储由操作系统产生的,也没有办法找到它

有,但你必须使用反射。这是我使用(在这种情况下,用户存储,但思路是一样的):

string path; 
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly()) 
{ 
    using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileNamePlusExtension, FileMode.Create, isf)) 
    { 
     stream.Write(content, 0, content.Length); 
     FieldInfo pi = stream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic); 
     path = pi.GetValue(stream).ToString(); 
    } 
} 

我dont't知道为什么会出现在不是一个内置的方式来获得这样的文件,也许未来。

也许你可以创建该文件,然后设置权限的来宾帐户。

+0

我不确定我是否愿意依赖一个私有变量。这有点冒险,绝对不是我希望随产品出货的那种黑客。最令我困扰的是,从我在网络上遇到的情况来看,隔离存储应该是一个安全的位置,用于存储信任度低的文件,这就是为什么Silverlight应用程序需要存储数据在用户端,但不知何故结果是错误的假设。 –

+0

是的,你说得对。对我们来说,这是在Windows7下临时存储文件并将其用于各种目的的唯一方法。不得不使用黑客总是让我怀疑代码中的设计缺陷,但我们没有找到更好的方法。 –