限制某些用户对某些文件夹的文件访问权限

时间:2012-05-24 13:54:03

标签: c# authentication iis-7 web-config authorization

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

因此,例如,dir/foo可以访问文件夹user1,但user2user3无法访问dir/bar,{{1}可以访问文件夹user2但不是user1user3

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

我的设置是这样的,我有一些角色为Member的用户。 Member代表公司。每个Member的用户角色为SellerBuyerViewer。现在,每个用户,无论他是MemberSellerBuyer还是Viewer,都应该能够看到属于他公司的文档。因此,如果Seller1包含文档a.txt,那么Seller1应该能够看到它,Member1应该能够看到它(Member1是公司哪个Seller1属于),Buyer1应该能够看到它(属于Member1),Viewer1应该能够看到它(属于Member1) ,但Buyer2不应该看到它(如果他属于Member2)。文档放在文件夹中,文件夹以文档所属用户的名称命名。例如,属于Seller1的文档位于名为Seller1的文件夹中。此外,还有一个名为Admin的用户可以查看所有文档。

我该怎么做?

1 个答案:

答案 0 :(得分: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个文件夹),那么您可以轻松地让系统直接访问文件系统以提供对这些文件列表的读取权限。如果你有更多,我建议有一个外部机制将这些文件索引到一个易于搜索的数据库。然后你的界面将负责确定谁看到哪些文件。

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