允许用户根据自定义安全要求查看特定记录

Allow users to view specific records based on custom security requirements

我需要一些关于如何最好地在 ASP.net 核心应用程序中实施安全机制的建议。应用程序用户使用 AD 身份验证进行身份验证。是否有此类实施的最佳实践?

我有一个项目记录列表。用户应该只能检索他们有权访问的项目列表。我有三种具有不同级别访问权限的用户类型,详情如下。

有人对实现所需的模型和逻辑有什么建议吗?

好吧,我保护页面的信息“仅限于”登录用户。因此,如果他们具有特定角色的成员身份,则只有这些用户可以 jump/see 这样的页面。

但是,在你的情况下,而且经常吗?

好吧,与其说是用户可以使用的网页,不如说是受限制的网页。

但是,如果可以根据 IIS 安全性而不是您的代码来限制网页,则应使用该选项。

然而,通常在代码中,例如,我们有来自给定公司的个人用户,并且只有一些用户可以并且被允许查看所有项目。 (所以有些人只能看到他们自己的项目,但是从那家公司,有些人有权看到+使用所有项目。

所以,我们经常有这样的代码:

    Dim cmdSQL As New SqlCommand("dbo.GetProjects", GetCon)
    cmdSQL.CommandType = CommandType.StoredProcedure

    cmdSQL.Parameters.Add("@LogonID", SqlDbType.Int).Value = Membership.GetUser.ProviderUserKey
    cmdSQL.Parameters.Add("Email", SqlDbType.NVarChar).Value = Membership.GetUser.Email
    cmdSQL.Parameters.Add("@PortalMaster", SqlDbType.Bit).Value = IIf(Roles.IsUserInRole("PortalMaster"), 1, 0)

因此,如果用户是 PortalMaster,则他们可以获取并查看属于该公司的所有项目。 (每个登录站点的公司可以有 1 或 20 名属于给定公司的员工)。

因此,在上面,查询将通过 EmployeeID(他们的登录名)提取项目,因此他们只能看到自己的项目。

如果您是 PortalMaster 组的成员,那么我们会根据 ComapnyID 拉取项目。

所以,虽然您可能没有像上面那样使用较旧的安全提供商?使项目变得简单的查询必须限制基于上述返回的行。

返回这些项目后(在漂亮的网格中 - 包括搜索选项),他们就可以 select(单击)一个项目。下一页不再重要,因为在您 select 编辑项目之前,您无法进入项目详细信息页面。

所以,很明显,对于创建它的给定项目,您必须知道。因此,您显示他们当前项目的能力将根据他们的登录 ID 或您现在使用的任何内容受到限制。

但是,对于州级用户?然后你的标准是他们的登录 ID 和他们属于基于该登录的状态。

然后是“管理员”角色或组 - 他们可以搜索和拉取所有项目。

因此,虽然我们确实通过“角色”安全性(基于 IIS)来限制网页,但这仅意味着所有用户都可以或不能根据他们的角色成员访问某些网页(并且这种安全性并不我需要代码 - 分配给这些网页的 IIS 安全性可以为您完成所有这些肮脏的工作。

但是,如果您是合法登录,那么您只能从事属于您公司的项目。但是,如果该用户也具有“PortalMaster”的角色,那么这是一个问题,如果他们有,那么我们将所有项目用于显示到该给定用户的 select。

当然我们从不使用URL“查询参数”,这样的内部数据库公司 ID 或 ContactID(用户 ID)永远不会公开,也不允许显示不公开的信息或数据t 属于给定用户。

因此,您需要构建一些 sql 或一些存储过程,并为那些 returns 行基于其角色成员资格的数据的存储过程设置一些“参数”你会如何处理这个问题。所以在上面,如果用户是门户网站管理员,那么存储过程会根据他们所属的公司而不是他们的联系人 ID 简单地查询数据。

现在,这当然假设数据库模式已设置,例如,我们有一家公司 table,一名员工 table(有他们的登录信息),然后当然创建的每个项目都有创建者和项目所属的公司。所以,这个简单的信息就足以提供 2 级安全。

我们实际上没有可以查看和查看系统中所有项目的“超级用户”,但这实际上并不是一个坏主意,因为用于测试或检查具有某些项目的项目问题现在是一个“痛苦”,因为理论上我们必须为该公司创建登录名或获取密码。

因此,我们创建的所有登录都属于给定的公司。这样当一个用户创建一个新项目时,只能在那个公司下创建,当然一个项目也需要创建该项目的用户。

因此,您只需限制页面中返回的记录,他们可以在其中 select 处理一个项目。 IIS 安全性,或者实际上 SQL 服务器安全性作为一般规则不能为您提供这种类型的安全性 - 开发人员必须这样做。