我有一个网站,用户使用表单身份验证登录到该网站,我希望将特定文件夹中的文件访问权限限制为某些用户。
因此,例如,dir/foo
可以访问文件夹user1
,但user2
或user3
无法访问dir/bar
,{{1}可以访问文件夹user2
但不是user1
或user3
。
上面提到的文件夹不是在我部署网站时创建的。它们是在网站的整个生命周期中创建的,我可以通过代码(通过文件的名称)知道谁应该有权访问哪些文件。
我的设置是这样的,我有一些角色为Member
的用户。 Member
代表公司。每个Member
的用户角色为Seller
,Buyer
和Viewer
。现在,每个用户,无论他是Member
,Seller
,Buyer
还是Viewer
,都应该能够看到属于他公司的文档。因此,如果Seller1
包含文档a.txt
,那么Seller1
应该能够看到它,Member1
应该能够看到它(Member1
是公司哪个Seller1
属于),Buyer1
应该能够看到它(属于Member1
),Viewer1
应该能够看到它(属于Member1
) ,但Buyer2
不应该看到它(如果他属于Member2
)。文档放在文件夹中,文件夹以文档所属用户的名称命名。例如,属于Seller1
的文档位于名为Seller1
的文件夹中。此外,还有一个名为Admin
的用户可以查看所有文档。
我该怎么做?
答案 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个文件夹),那么您可以轻松地让系统直接访问文件系统以提供对这些文件列表的读取权限。如果你有更多,我建议有一个外部机制将这些文件索引到一个易于搜索的数据库。然后你的界面将负责确定谁看到哪些文件。
最后,要向用户提供文件,您需要构建第二个页面,其具体职责是获取特定文件并将其作为二进制流提供。