Как обновить кэш проверки доступа AzMan?
Я создал веб-приложение, которое использует Microsoft AzMan, и оно прекрасно работает, пока у вас нет нескольких пользователей. Я почти на 100% уверен, что AzMan кэширует один и тот же материал для нескольких пользователей.
Чтобы немного упростить эту проблему, проблема, с которой я сталкиваюсь, заключается в том, что пользователь A заходит на сайт и имеет полный доступ, ему предоставляется правильный доступ и он может работать просто отлично. Затем пользователь B заходит на сайт, имеет только доступ к просмотру, но поскольку AzMan уже видел полный доступ пользователя A, он также предоставляет полный доступ пользователю B.
Я использую метод AddStringSids при создании клиентского контекста, потому что это единственный метод, который будет работать для любой ситуации. Есть ли проблема с этим? Раньше у нас не было этой проблемы, когда мы создавали клиентские контексты из токена.
Ниже приведен точный код, который я использую для создания контекста. app - это переменная IAzApplication2, а ClientContext.SID - это идентификатор безопасности для данного пользователя.
IAzClientContext2 cctx = app.InitializeClientContext2("AppNameHere", null);
cctx.AddStringSids(new object[] { (object)ClientContext.SID.ToString() } as object);
РЕДАКТИРОВАТЬ: я вообще не использую поставщика ролей ASP.Net, так как это потребует, чтобы приложение знало о ролях. Я использую только COM API.
РЕДАКТИРОВАТЬ 2: Кроме того, если пользователь B вошел в систему первым, то пользователь A не имеет доступа при входе в систему. Таким образом, он не просто поддерживает самый высокий уровень доступа.
1 ответ
Я думал об удалении этого вопроса, но думаю, что лучше оставить его здесь, чтобы, возможно, помочь кому-то еще с глупой ошибкой. AzMan не кэширует результаты проверки доступа для нескольких пользователей. Метод AddStringSids не является проблемой. Проблема была в моем коде.
У меня была статическая переменная, которая содержала ссылку на клиентский контекст и создавалась только один раз для жизни приложения, а не для запроса пользователя. Именно эта статическая переменная заставила его получить доступ от первого лица к его доступу.
Так что это была глупая ошибка программиста, или SBCK (Короткий между стулом и клавиатурой), как сказал бы мой начальник. Поэтому, если вы столкнулись с подобной проблемой в ASP.Net, проверьте свои переменные и убедитесь, что у вас нет проблемы со статической переменной.