Всем доброго времени суток!

В Террасофт 3.х, при создании записи в таблице, которая администрируется по записям, автоматически выдаются полные права автору, и права на чтение и изменение ответственному.

Раздача прав ответственному реализована в конфигурации, а именно функцией GiveRightsToRecordOwner(Dataset), логику которой при желании можно легко изменить.

Логика же раздачи прав автору записи спрятана немного "глубже" - записи в таблицу прав (tbl_tablenameRights) попадают в следствии выполнения триггера на таблице, который в свою очередь создается хранимой процедурой tsp_AdministratedByRecords.

В случае если у Вас стоит задача изменить логику раздачи прав автору записи таким образом, чтобы, к примеру, данный пользователь имел лишь доступ на чтение и изменение, необходимо либо отредактировать триггер соответствующей таблицы (при пересохранении таблицы изменения пропадут), либо изменить саму хранимую процедуру.

В данном случае мы будем изменять хранимку, а именно в блоке генерации исходного кода триггера необходимо изменить уровень доступа:

INSERT INTO ' + @RightTableName + ' (' + @NL +
        '
   [ID]' + @NL +
        '
   ,[RecordID]' + @NL +
        '
   ,[AdminUnitID]' + @NL +
        '
   ,[CanRead]' + @NL +
        '
   ,[CanWrite]' + @NL +
        '
   ,[CanDelete]' + @NL +
        '
   ,[CanChangeAccess])' + @NL +
        '
 SELECT' + @NL +
        '
   newid()' + @NL +
        '
   ,[ID]' + @NL +
        '
   ,@AdminUnitID' + @NL +
        '
   ,1' + @NL +
        '
   ,1' + @NL +
        '
   ,1' + @NL +
        '
   ,1' + @NL +
        '
 FROM INSERTED' + @NL +

четыре единички в данном фрагменте означают что пользователь имеет полные права. Соответственно, при замене их на "0":

INSERT INTO ' + @RightTableName + ' (' + @NL +
        '
   [ID]' + @NL +
        '
   ,[RecordID]' + @NL +
        '
   ,[AdminUnitID]' + @NL +
        '
   ,[CanRead]' + @NL +
        '
   ,[CanWrite]' + @NL +
        '
   ,[CanDelete]' + @NL +
        '
   ,[CanChangeAccess])' + @NL +
        '
 SELECT' + @NL +
        '
   newid()' + @NL +
        '
   ,[ID]' + @NL +
        '
   ,@AdminUnitID' + @NL +
        '
   ,1' + @NL +
        '
   ,1' + @NL +
        '
   ,0' + @NL +
        '
   ,0' + @NL +
        '
 FROM INSERTED' + @NL +

после сохранения хранимки, и пересохранения таблиц, которые администрируются по записям, автор будет иметь права только на чтение и изменения.

Нравится

Поделиться

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

Столкнулся с проблемой, после лицензирования пользователей, я "привязал" пользователя Supervisor к реальному контакту(переименовал карточку Контакт), однако по всем записям, кот. создает супервизор есть доступ для группы Все пользователи>. Раньше, когда я заполнял базу под этим пользователем наоборот меня все устраивало....,а сейчас как-то не очень :-), когда к письмам, задачам и т.д. конфиденциальной информации все будут иметь доступ, хотелось бы это убрать, раз и на всегда(а не каждый раз удалять эту группу из доступа). Но в разделе Администрирование на закладке "Доступ по умолчанию" у этого пользователя нигде не настроено, что все пользователи> имеют доступ к создаваемым supervisor'ом записям. Подскажите где убрать?
версия программы 3.2.1.14

Нравится

2 комментария

Данная опция регулируется исключительно [Правами доступа по умолчанию].
т.е. в момент создания записи система смотрит в таблицу прав по умолчанию и добавляет данные права к записи.
Дело в том что права доступа по умолчанию могут раздаваться как для отдельных пользователей, так и на группы. Скорей всего у Вас данные права настроены в правах по умолчанию для группы [Все пользователи](так как supervisor входит в данную группу).
Проверьте настройки прав доступа по умолчанию для данного пользователя и для групп к которым он относиться.
В случае если права не розданы, а группа [Все пользователи] всеравно добавляется к [Доступу] данной записи - обратитесь в службу технической поддержки по адресу support@tscrm.com, для определения причин данного сбоя именно на Вашей базе.

Большое спасибо!:-) Я совсем забыл о глобальной группе "Все пользователи", из которой я Supervisor'а не исключал... А по этой группе доступ по умолчанию настроен для всех таблиц.

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