我创建了一个使用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在登录时无权访问。因此,不仅仅是保持最高级别的访问权限。
答案 0 :(得分:1)
我想要删除这个问题,但我认为最好把它放在这里,以便可能帮助其他人犯一个愚蠢的错误。 AzMan不会跨多个用户缓存访问检查结果。 AddStringSids方法不是问题。问题出在我的代码中。
我有一个静态变量,它持有对客户端上下文的引用,并且只在应用程序的生命周期内创建一次,而不是用户请求的生命周期。这个静态变量使它成为第一人称访问它的访问权。
正如我的老板所说,这是一个愚蠢的程序员错误,或SBCK(主席和键盘之间的短路)。因此,如果您在ASP.Net中遇到类似问题,请检查您的变量并确保没有静态变量问题。