如何将特定目录下文件的浏览权限和下载权限分离开来。

这是一个非常有意义、非常令人兴奋的事情,如果能够将特定目录下的浏览权限和下载权限分离开来的话。如果单纯的依靠操作系统和服务器来看,就微软现在提供的功能来说是非常困难的(几乎是无法实现的)。这个教训是我在苦苦思索了一个多月和查阅了无数资料的基础上得来的。
但是幸运的是这个问题不是没有办法解决的。以下我来说说实现的方法和思路。
    一直以来,我总是在考虑这个问题。但是通过我查阅无数的资料,至今没有(全世界范围内)有人将这个功能用于实际的项目中。
    我的最终目标是实现“我”的文件夹下的文件只允许我指定的人来下载,但是所有人都可以浏览。由此看来这种权限的分离是彻头彻尾的分离。是否允许下载是可以完全控制的。因为它具体到了每个人(即每个ID)。而且这不是基于组策略的实现。组策略不是我想要的方式,原因是用组策略不自由,不是我完全可以控制的。
    再一个想法是这种分离也不是基于角色(role)的,原因和组策略相同。我的要求是以每个用户为中心,即中心是可变的。也就是说每个人都可以指定其特定文件夹下的文件可以被指定的人来下载。everyone 有一个浏览权限(必须有的)。
    还有一个要说的是这种分离不能有文件夹下的webconfig来实现。原因是如果使用webconfig来实现的话,其可选得操作就是基于组和角色。他不能是基于函数的(或者说是基于表达式的)。所以这也不是我想要的方式。我想要得效果类似于,如果来访者的ID和我的ID有某种关系。如果这种关系成立则是可以下载的。否则,对不起,你只能看看而已。
   由此看来,这种要求近似苛刻,但是没错,这就是我想实现的功能。
   (如果你可以由此产生些联想之类的话,祝贺你,你可以大有作为了。你可以在下面回复告诉我你的想法。)
   不要绝望,这看起来很难实现,但是我已经找到解决的办法了。
    这种方法其实很简单,只是思想的转变而已。但是经过了这个简单的转变你可以发现天地是多么的宽广。
    下面来说说这个转变方式。
    首先,做好你的关于以某个人为中心的可以下载文件的表达式。这个很简单。但是每个人都是不同的表达式(张三给李四买了一瓶酒,李四喝完觉得不错,“好哥们你来下载吧”。如果是假酒,李四大火“什么玩艺也来给我喝,不让你下”。这里是以李四为中心,张三为判断条件的)。
    做好了判断条件之后就是给他下载链接了。这点容易。给你下载就是。
    如何让所有人都可以浏览的实现是这里的重点。这里要用到的一个概念就是伪装。(没办法,微软不给实现就自己想办法了)。这里就是用一行代码来生成list一个文件夹下所有文件的功能。把文件的属性读出来。表示出来。地址就不要现示了。当一个ID点击之后就联动这个文件夹的主人的表达式。可以了,打开下载地址。否则,deny。如果没有注册,点击后打开注册页面。
    至此,你可以看到我们要实现的功能都已经实现。关键是一个实现的思路问题。我们已经找到了。(如果你还有更好的实现方法请您告诉我。)我们期望微软在以后的服务器或者是dotnet框架升级的时候,可以修改一下。能够给我们留下更多的选择余地,或者给我们留一个interface。让我们实现的更简单一点。

posted on 2007-12-03 20:31  woog  阅读(2289)  评论(10编辑  收藏  举报

导航