3

我创建了一个使用 Microsoft AzMan 的 Web 应用程序,它可以正常工作,直到您拥有多个用户。我几乎 100% 确定 AzMan 正在为多个用户缓存相同的内容。

为了简化一点,我看到的问题是用户 A 访问该站点并具有完全访问权限,该用户被授予正确的访问权限并且可以正常工作。然后用户 B 访问该站点,只有查看权限,但因为 AzMan 已经看到用户 A 的完全访问权限,所以它也授予用户 B 完全访问权限。

我在创建客户端上下文时使用了 AddStringSids 方法,因为它是唯一适用于各种情况的方法。这有问题吗?当我们从令牌创建客户端上下文时,我们曾经没有这个问题。

以下是我用来创建上下文的确切代码。app 是 IAzApplication2 变量,ClientContext.SID 是相关用户的 SecurityIdentifier。

IAzClientContext2 cctx = app.InitializeClientContext2("AppNameHere", null);
cctx.AddStringSids(new object[] { (object)ClientContext.SID.ToString() } as object);

编辑:我根本没有使用 ASP.Net 角色提供程序,因为这需要应用程序了解角色。我只使用 COM API。

编辑2:另外,如果用户B首先登录,那么用户A在登录时就没有访问权限。所以它不仅仅是保持最高级别的访问权限。

4

1 回答 1

1

我想过删除这个问题,但我认为最好把它留在这里,以帮助其他人解决一个愚蠢的错误。AzMan 不会跨多个用户缓存访问检查结果。AddStringSids 方法不是问题。问题出在我的代码中。

我有一个静态变量,它持有对客户端上下文的引用,并且只在应用程序的生命周期内创建一次,而不是在用户请求的生命周期内创建一次。这个静态变量是导致它具有第一人称访问权限的原因。

所以这是一个愚蠢的程序员错误,或者我老板所说的 SBCK(椅子和键盘之间短路)。因此,如果您在 ASP.Net 中遇到类似问题,请检查您的变量并确保您没有静态变量问题。

于 2009-07-24T20:47:22.837 回答