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

В Террасофт 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 комментариев
Показать все комментарии