У меня есть приложение с около 20 сетками, которые можно отфильтровать с помощью текстовых полей и некоторых выпадающих списков. Веб-сайт защищен пользовательской таблицей, в которой хранятся имя пользователя и пароли. Когда пользователь входит в систему, файл cookie создается с такой информацией, как идентификатор пользователя, идентификатор компании и идентификатор судна, если это применимо.
Если пользователь является пользователем компании, фильтр всегда использует companyid из файла cookie для фильтрации данных на основе companyid = "12" и vessel = "what". Если companyid не имеет судна, результаты не отображаются.
Ситуация идет не так, когда пользователь 1, который является администратором, или любой пользователь с более высокими привилегиями нажимает фильтр. Предложение where обновляется любым фильтром пользователя 1 для каждого вошедшего в систему пользователя. Если пользователь компании с ограниченным доступом нажимает, чтобы перейти на другую страницу, он видит результаты поиска администратора, а не видит страницу 2 своих судов или услуг. Идентификатор компании удаляется и никогда не добавляется обратно, как при входе в систему.
Уверен, проблема в следующем методе. Условие where сбрасывается каждый раз, когда кто-то нажимает кнопку фильтра, и каждый зарегистрированный пользователь получает это новое предложение where. Есть ли способ, которым я могу изменить это на зависимый от сеанса метод или параметр, или, может быть, я могу создать оператор if, который захватывает клиента или shipid и добавляет его к предложению where, как это происходит, когда пользователь впервые входит в систему для пользователей компании и судна это, однако, не устранит проблему с разделением _whereclause между сеансами и все еще вызовет проблемы, когда пользователь нажимает на следующую страницу. Вместо того, чтобы получать результаты, они ничего не получат.
Любой другой совет высоко ценится.
protected void PopulategvVesselListing (string whereclause)
{
_dsGlobalDatasource = new TelemarVesselListings().GetVesselListingDatasource(whereclause);
if (_dsGlobalDatasource.Tables[0].Rows.Count != 0)
{
gvVesselListing.DataSource = _dsGlobalDatasource;
gvVesselListing.DataBind();
}