【发布时间】:2011-04-06 07:08:14
【问题描述】:
总结:我需要根据 url 的查询字符串中存在的数据来授权页面,而不仅仅是页面名称。
背景:
假设我正在构建一个图书馆库存系统。可以以管理员或用户角色创建用户并将其分配给单个库。同一个数据库中有数百个相互竞争的图书馆,因此确保一个图书馆的用户无法查看另一个图书馆的库存是很重要的。
现在我正在使用一个非常标准的 ASP.NET 设置:使用 SqlMembershipProvider 的表单身份验证。使用 SqlRoleProvider 进行授权,通过 web.config 中的 <authorization> 部分进行配置。使用 SiteMap 提供程序进行安全修整以隐藏未经授权的页面。
为了防止库存信息泄露,我在每次库存查询时手动检查用户的关联图书馆 ID。它可以工作,但它很乏味并且容易出错。必须有更好的方法。
问题:
现在用户可以在库中创建任意“集合”。 (例如,馆藏 A 中包含书籍 1、2 和 3。)管理员希望能够授予管理员/用户对单个馆藏的访问权限,而不仅仅是整个图书馆。
所以,如果用户访问www.com/Book.aspx?BookId=1,系统需要在显示页面之前确保用户对“Book 1”所在的集合具有权限。如果他们访问 www.com/Reviews.aspx?ReviewId=23,我需要确保评论是针对他们有权查看的收藏中的一本书。
1) 我怎样才能以最标准的 ASP.NET 方式实现它?
在基本页面内手动检查?
自定义 HttpModule?
自定义角色提供者?
我对如何存储管理员/用户权限不感兴趣,而是对如何/在哪里根据这些权限进行授权。
(感谢您提供有关如何实施其中任何一个的示例)
2) 更复杂的是,我仍然希望通过安全调整来检查用户是否对任何集合或库具有管理员权限,如果没有,则隐藏管理员页面。
【问题讨论】:
-
+1 将您的问题格式化得非常好!
标签: asp.net authorization