Публикация

Передача прав доступу

При зміні групи користувача в системі (Нпр: при звільненні і переході співробітника з одного відділу в інший) права попередньої групи, в якій користувач знаходився у нього не скасувались. Зате права нової групи для цього співробітника успішно додались.

З'ясувалося, що параметри авторизації користувача кешуються в таблиці tbl_UserAdminUnit і дані цієї таблиці не очищуються при зміні адміністратором групи користувача.

Щоб усунути цей негаразд потрібно в скрипт ds_UserInGroupScript додати функцію(для Oracle):

function DeleteAdminUnit(Dataset,UserName){
  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 додати: 

function ds_UserInGroupOnDatasetAfterPost(Dataset) {
  var UserName = GetSQLObjectName('ds_User', Dataset.Values('UserID'));

  DeleteAdminUnit(Dataset,UserName);
}

а також додати визов функції в ds_UserInGroupOnDatasetAfterDelete:

function ds_UserInGroupOnDatasetAfterDelete(Dataset, KeyValue) {
  Connector.DBEngine.DeleteUserFromRole(UserInGroupScript.GroupName,
UserInGroupScript.UserName);

  DeleteAdminUnit(Dataset, UserInGroupScript.UserName);
}

Особисте спасибі Денису Масалову за допомогу у вирішені цієї проблеми.

Нравится

Поделиться

5 комментариев

Юрий, а пользователь перелогинивался или продолжал работать?

Я звертався з цією проблемою в техпідтримку. На жаль, поки що ніякого рішення на заміну цьому рішенню я не маю.

Користувач продовжував працювати зі старими правами і новими правами навіть після повторного входу в систему :(

Функция DeleteAdminUnit лишняя, Вам необходимо посмотреть хранимую процедуру "tsp_LoadUserAdminUnit". В частности в конце нее идет очистка старых ролей - возможно в Вашей версии там ошибка. Эта "хранимка" всегда выполняется при логине пользователя, соответственно всегда приводит состояние tbl_UserAdminUnit в актуальное.

Нажаль, оновленої хранимки від техпідтримки не отримав. Сам їх не корегував, не маю досвіду і доступу. Рішення виконав доступними мені засобами.

Показать все комментарии