2009-07-24 1 views
3

Я создал веб-приложение, которое использует Microsoft AzMan, и оно отлично работает, пока у вас не будет нескольких пользователей. Я почти на 100% уверен, что AzMan кэширует один и тот же материал для нескольких пользователей.Как обновить кеш проверки доступа 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); 

EDIT: Я не использую поставщика роли ASP.Net вообще, поскольку для этого потребуется, чтобы приложение было осведомлено о ролях. Я использую только COM API.

EDIT 2: Кроме того, если пользователь B вошел в систему первым, тогда пользователь A не имеет доступа при входе в систему. Таким образом, он не просто поддерживает высокий уровень доступа.

ответ

1

Я думал об удалении этого вопроса, но я думаю, что лучше оставить его здесь, чтобы помочь кому-то другому с глупой ошибкой. AzMan не кэширует результаты проверки доступа для нескольких пользователей. Метод AddStringSids не является проблемой. Проблема была в моем коде.

У меня была статическая переменная, которая содержала ссылку на контекст клиента и создавалась только один раз для жизни приложения, а не для жизни запроса пользователя. Эта статическая переменная - это то, что заставило ее получить доступ от первого лица к доступу.

Так что это была глупая ошибка программиста, или SBCK (Short Between the Chair и Keyboard), как сказал бы мой босс. Поэтому, если вы сталкиваетесь с аналогичной проблемой в ASP.Net, проверьте свои переменные и убедитесь, что у вас нет проблемы с статической переменной.

 Смежные вопросы

  • Нет связанных вопросов^_^