gpt4 book ai didi

asp.net - ASP.NET 中的基于数据的授权

转载 作者:行者123 更新时间:2023-12-04 12:43:33 25 4
gpt4 key购买 nike

摘要 :我需要根据 url 的查询字符串中存在的数据授权页面,而不仅仅是页面名称。

背景:

假设我正在构建一个图书馆库存系统。可以以管理员或用户角色创建用户并将其分配到单个库。同一个数据库中有数百个相互竞争的图书馆,所以 确保一个图书馆的用户无法查看另一个图书馆的库存很重要 .

现在我正在使用一个非常标准的 ASP.NET 设置:使用 SqlMembershipProvider 的表单例份验证。使用 SqlRoleProvider 授权,通过 <authorization> 配置web.config 中的部分。使用 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)更复杂的是,我仍然希望通过安全调整来检查用户是否对任何集合或库具有管理员权限,如果没有,则隐藏管理页面。

最佳答案

我不会在 UI (ASP.NET) 层附近的任何地方处理这个问题,而是在应用程序服务中处理。就像是:

  • 构建需要 IPrincipal 的服务(或您的自定义用户对象)
    作为构造函数参数。
  • 请求书籍/评论/任何内容时,服务负责
    用于检查用户是否有权访问
    资源。
  • 如果用户没有访问权限,做一些预定的事情(通过一个
    消息,抛出异常,返回 null)。

  • 从长远来看,这将更具可测试性和可用性,而不是从 ASP.NET UI 方面担心它。

    如果您必须在 ASP.NET 端处理它,我会考虑使用自定义 IPrincipal和定制 RoleProvider将每个库包装成一个角色来访问,那么你可以使用大部分 LoginView等控件。

    关于asp.net - ASP.NET 中的基于数据的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3609664/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com