SPS中的文档权限管理只能针对文档库一级,而不能再对文档进行细化单个授权的限制,是所有SPS开发人员和管理员心中的“痛”。为了解决这个问题,不少开发人员“各出各招”,提供了各自“曲线救国”的方案。
以前我曾经做过一个文档管理系统的项目,底层使用WSS,上面一层是纯粹的ASP.NET项目,通过访问WSS SDK,来获得WSS提供的功能。这种方案相当于自己将SPS里面的文档库模块重新实现了一遍,开发人员可以获得最大化的灵活度,包括把权限设定到文件一级。当然这种方式开发复杂度也相当高,除非有非常良好的资源,包括对WSS开发非常了解的开发人员,才可能采用这样的方案。
当然,我们也可以做出更轻巧的解决方案,我做过的一个是这样来实现的:首先在文档库的权限设置中,将一般用户所具有的权限都去掉,只让管理员对此文档库具有所有访问权限,然后给文档库增加一个新的栏,比如叫“Permission”,然后如果希望哪个站点角色或者用户能够访问一篇文档,就将这篇文档的“Permission”栏的值设置成那个角色或用户的名称即可。然后通过自己定制的一个WebPart来给用户显示文档库的信息。注意,使用默认的显示文档库内容的WebPart,是显示不出什么内容来的,因为实际上普通用户对这个文档库根本不具备访问权限。
下面是使用方法的一些演示图片:
首先,让“读者”这个角色不具备访问文档库的权限。
然后,管理员进入文档库,将文档的“Permission”栏的值设置成对文档有访问权限的角色和用户名。
当前登录Portal的用户是只具有“读者”权限的,注意看下面图片中下方的那个WebPart,那是SPS自带的显示文档库内容的WebPart,由于当前用户没有权限访问名为“示范文档库”的文档库,所以这个WebPart只会显示错误信息,或者会弹出一个窗口让用户输入用户名和密码。但是看上方那个定制的WebPart,它就可以正确的将我们自己在上面图片中所设定的有权限访问的文档显示出来。
能够显示文档列表,那么能不能打开这些文档呢?答案是没问题!在定制的WebPart上点击文档链接,就能够直接下载这些文档。但是注意,如果你直接在IE地址栏输入这个文档的Url,SPS是不回让你打开或下载的,因为当前用户实际是没有权限访问这个文档的。只有通过这个定制的WebPart,才可能突破SPS的限制,按照我们自己单独设定的文档访问权限来打开文档。
过两天我会把代码整理一下后,把这个WebPart和使用文档放在Blog上。