Возникло некоторое непонимание работы механизма доступа по умолчанию для групп контактов в 3.3.1.
Происходит следующее:
На закладке "Права доступа по умолчанию" для группы "Все пользователи" и таблицы "Группа контактов" настроены некоторые права.
Заходим в раздел контакты и создаем новую группу. Трассировка показывает, что успешно выполняется insert в таблицу tbl_ContactGroup и при этом успешно отрабатывает триггер tr_tbl_ContactGroup_AI, который вставляет несколько записей в tbl_ContactGroupRight. Вроде бы все нормально, но сразу после этого выполняется вот такой запрос:
WHERE
("tbl_ContactGroupRight"."AdminUnitID" > :pAdminUnitID AND
"tbl_ContactGroupRight"."RecordID" = :pRecordID)
и записи из таблицы доступа, естественно, удаляются (кроме создателя). Таким образом никто данную группу не видит вопреки настроке прав по умолчанию. Приходится права на группы раздавать вручную.
Я не нашел места, откуда этот запрос выполняется. Может кто-нибудь пояснить в чем тут дело?
Нравится
Андрей, добрый день.
На самом деле так реализовано специально для того, чтобы группы, которые создаёт пользователь, всегда были личными. В результате пользователь видит только те группы, которые ему реально нужны и с которыми он постоянно работает. Если же он хочет, чтобы его группу видел кто-либо ещё, он может раздать на неё доступ с помощью опции "Права доступа" в контекстном меню дерева групп.
Для изменения этой функциональности на ту, которая Вам необходима, нужно удалить (а лучше закомментировать) весь текст из обработчика ds_ItemGroupOnDatasetAfterPost скрипта ds_ItemGroupScript:
[javascript]
//-----------------------------------------------------------------------------
// ds_ItemGroupScript
//-----------------------------------------------------------------------------
var ItemGroup = new Object();
function ds_ItemGroupOnDatasetAfterPost(Dataset) {
/*if (!ItemGroup.WasInsert) {
return;
}
var Select = GetSelectQueryPrimarySelect(Dataset.SelectQuery);
var DeleteQuery = Services.GetNewItemByUSI('dq_GroupRights');
var RightsTable = Select.FromTable.RightsTable;
DeleteQuery.Table = RightsTable;
var Parameters = DeleteQuery.Parameters;
Parameters('RecordID').Value = Dataset.Values('ID');
Parameters('AdminUnitID').Value = Connector.CurrentUser.ID;
var Filters = DeleteQuery.Filters;
Filters.ItemsByCode('RecordID').TestExpression.Field =
RightsTable.Fields('RecordID');
Filters.ItemsByCode('AdminUnitID').TestExpression.Field =
RightsTable.Fields('AdminUnitID');
Filters.ItemsByCode('RecordID').TestExpression.TableAlias =
RightsTable.SQLName;
Filters.ItemsByCode('AdminUnitID').TestExpression.TableAlias =
RightsTable.SQLName;
DeleteQuery.Execute();*/
}
function ds_ItemGroupOnDatasetBeforePost(Dataset, DoPost) {
ItemGroup.WasInsert = (Dataset.State == dstInsert);
}
[/javascript]
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Большое спасибо, Олег.
Теперь все ясно.
Нам надо, чтобы группы создаваемые администратором были видны всем, поэтому я просто вставлю соответствующее условие в скрипт.
Раскопал в архивах эту тему, как раз она мне сейчас очень актуальна.
"Лабьяк Олег Игоревич" написал:
На самом деле так реализовано специально для того, чтобы группы, которые создаёт пользователь, всегда были личными. В результате пользователь видит только те группы, которые ему реально нужны и с которыми он постоянно работает. Если же он хочет, чтобы его группу видел кто-либо ещё, он может раздать на неё доступ с помощью опции "Права доступа" в контекстном меню дерева групп.Для изменения этой функциональности на ту, которая Вам необходима, нужно удалить (а лучше закомментировать) весь текст из обработчика ds_ItemGroupOnDatasetAfterPost скрипта ds_ItemGroupScript
Мне не понятна логика изменений в программе: создали функционал, позволяющий настраивать права по умолчанию для вновь создаваемых групп и тут же всю его функциональность зарубили. Кому необходимо чтобы вновь создаваемые группы были видны только владельцу, то это можно настроить с помощью прав по умолчанию. Зачем зарубили такой полезный функционал? Администратор должен решить кому и какие группы должно быть видно, а уж если пользователь не согласен с чем-то, то пусть настраивает свои права доступа на созданную группу. Я обязательно этот кусок закомментирую, похоже что это пережиток старой версии забыли убрать.