我已经创建了一个使用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在登录时没有访问权限。因此,它不仅仅是保持最高级别的访问。
发布于 2009-07-24 20:47:23
我想过删除这个问题,但我觉得最好还是把它留在这里,这样可能会帮助其他犯了愚蠢错误的人。AzMan不会跨多个用户缓存访问检查结果。AddStringSids方法不是问题。问题出在我的代码中。
我有一个静态变量,它保存对客户端上下文的引用,并且只在应用程序的生命周期内创建一次,而不是在用户请求的生命周期内创建一次。这个静态变量是导致它接受第一人访问的原因-它的访问。
所以这是一个愚蠢的程序员错误,或者像我的老板所说的SBCK (椅子和键盘之间的缩写)。因此,如果您在ASP.Net中遇到类似的问题,请检查您的变量,并确保没有静态变量问题。
https://stackoverflow.com/questions/1178874
复制相似问题