При зміні групи користувача в системі (Нпр: при звільненні і переході співробітника з одного відділу в інший) права попередньої групи, в якій користувач знаходився у нього не скасувались. Зате права нової групи для цього співробітника успішно додались.
З'ясувалося, що параметри авторизації користувача кешуються в таблиці tbl_UserAdminUnit і дані цієї таблиці не очищуються при зміні адміністратором групи користувача.
Щоб усунути цей негаразд потрібно в скрипт ds_UserInGroupScript додати функцію(для Oracle):
try {
var Cmd = 'begin delete from "tbl_UserAdminUnit" ';
var Where = 'where (upper("tbl_UserAdminUnit"."UserName")='+"'"+UserName+"'"+');';
var SQL = Cmd + Where + " end;";
Connector.DBEngine.ExecuteCustomSQL(SQL, System.EmptyValue);
} catch (e) {
Log.Write(1, e.message);
}
}
в датасеті ds_UserInGroup підписатись на подію OnDatasetAfterPost додати:
var UserName = GetSQLObjectName('ds_User', Dataset.Values('UserID'));
DeleteAdminUnit(Dataset,UserName);
}
а також додати визов функції в ds_UserInGroupOnDatasetAfterDelete:
Connector.DBEngine.DeleteUserFromRole(UserInGroupScript.GroupName,
UserInGroupScript.UserName);
DeleteAdminUnit(Dataset, UserInGroupScript.UserName);
}
Особисте спасибі Денису Масалову за допомогу у вирішені цієї проблеми.
Юрий, а пользователь перелогинивался или продолжал работать?
Я звертався з цією проблемою в техпідтримку. На жаль, поки що ніякого рішення на заміну цьому рішенню я не маю.
Користувач продовжував працювати зі старими правами і новими правами навіть після повторного входу в систему :(
Функция DeleteAdminUnit лишняя, Вам необходимо посмотреть хранимую процедуру "tsp_LoadUserAdminUnit". В частности в конце нее идет очистка старых ролей - возможно в Вашей версии там ошибка. Эта "хранимка" всегда выполняется при логине пользователя, соответственно всегда приводит состояние tbl_UserAdminUnit в актуальное.
Нажаль, оновленої хранимки від техпідтримки не отримав. Сам їх не корегував, не маю досвіду і доступу. Рішення виконав доступними мені засобами.