Возникло некоторое непонимание работы механизма доступа по умолчанию для групп контактов в 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:
//----------------------------------------------------------------------------- // 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); }
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Большое спасибо, Олег.
Теперь все ясно.
Нам надо, чтобы группы создаваемые администратором были видны всем, поэтому я просто вставлю соответствующее условие в скрипт.
Раскопал в архивах эту тему, как раз она мне сейчас очень актуальна.
"Лабьяк Олег Игоревич" написал:
На самом деле так реализовано специально для того, чтобы группы, которые создаёт пользователь, всегда были личными. В результате пользователь видит только те группы, которые ему реально нужны и с которыми он постоянно работает. Если же он хочет, чтобы его группу видел кто-либо ещё, он может раздать на неё доступ с помощью опции "Права доступа" в контекстном меню дерева групп.Для изменения этой функциональности на ту, которая Вам необходима, нужно удалить (а лучше закомментировать) весь текст из обработчика ds_ItemGroupOnDatasetAfterPost скрипта ds_ItemGroupScript
Мне не понятна логика изменений в программе: создали функционал, позволяющий настраивать права по умолчанию для вновь создаваемых групп и тут же всю его функциональность зарубили. Кому необходимо чтобы вновь создаваемые группы были видны только владельцу, то это можно настроить с помощью прав по умолчанию. Зачем зарубили такой полезный функционал? Администратор должен решить кому и какие группы должно быть видно, а уж если пользователь не согласен с чем-то, то пусть настраивает свои права доступа на созданную группу. Я обязательно этот кусок закомментирую, похоже что это пережиток старой версии забыли убрать.