0

我有一个站点,用户使用表单身份验证登录该站点,我想在该站点中将特定文件夹中的文件的访问权限限制为某些用户。

因此,例如,文件夹dir/foo将可访问user1但不可访问user2user3文件夹dir/bar可访问user2但不可访问user1user3

上面提到的文件夹不是在我部署站点时创建的。它们是在网站的整个生命周期中创建的,我可以通过代码(通过文件名)知道谁应该有权访问哪些文件。

我的设置是这样的,我有一些具有Member. AMember代表一家公司。每个Member都有角色为SellerBuyer的用户Viewer。现在,每个用户,无论他是Member、还是应该能够看到属于他公司的文档。所以,如果有文件那么应该可以看到,应该可以看到(是所属的公司),应该可以看到(属于),应该可以看到(属于) ,但应该看不到(如果他属于SellerBuyerViewerSeller1a.txtSeller1Member1Member1Seller1Buyer1Member1Viewer1Member1Buyer2Member2)。文档放置在以文档所属用户的名称命名的文件夹中。例如,属于的文档Seller1位于名为Seller1. 此外,还有一个名为的用户Admin可以查看所有文档。

我怎样才能做到这一点?

4

1 回答 1

2

您可以在 web.config 文件中执行此操作。如果您将用户组织成组会更好,但可以逐个用户地进行:

<configuration>
    <system.web>
        <authorization>
            <!-- GLOBAL authorization -->
            <allow users="user1" />
            <deny users="user2, user3"/>
            <allow roles="GoodUsers" />
            <deny roles="BadUsers, MouthBreathers"/>
        </authorization>
    </system.web>
    <!-- local individual folder/file authorization
    <location path="/dir/foo">
        <system.web>
            <authorization>
                <allow users="user1" />
                <deny users="user2, user3"/>
                <allow roles="GoodUsers" />
                <deny roles="BadUsers, MouthBreathers"/>
            </authorization>
        </system.web>
    </location>
</configuration> 

编辑: 鉴于您更新的描述添加了文档管理方面和将公司添加到组合中的附加过滤器,您可以通过几种方法来做到这一点。我建议的主要方法是将所有文档放在根文件夹之外,这样任何随机用户都无法浏览它们。然后构建一个提供搜索能力的基于页面的界面。根据文件夹/文档的数量,这可以通过多种方式完成。如果每个文件夹的文档数量很少(每个文件夹少于 1000 个,少于 1000 个文件夹),那么您可以轻松地让您的系统直接访问文件系统以提供对这些文件列表的读取访问权限。如果您有更多,我建议您使用外部机制将这些文件索引到易于搜索的数据库中。

最后,为了向用户提供文件,您将构建第二个页面,其具体职责是获取特定文件并将其作为二进制流提供。

于 2012-05-24T13:58:58.370 回答