Всем доброго времени суток!
В Террасофт 3.х, при создании записи в таблице, которая администрируется по записям, автоматически выдаются полные права автору, и права на чтение и изменение ответственному.
Раздача прав ответственному реализована в конфигурации, а именно функцией GiveRightsToRecordOwner(Dataset), логику которой при желании можно легко изменить.
Логика же раздачи прав автору записи спрятана немного "глубже" - записи в таблицу прав (tbl_tablenameRights) попадают в следствии выполнения триггера на таблице, который в свою очередь создается хранимой процедурой tsp_AdministratedByRecords.
В случае если у Вас стоит задача изменить логику раздачи прав автору записи таким образом, чтобы, к примеру, данный пользователь имел лишь доступ на чтение и изменение, необходимо либо отредактировать триггер соответствующей таблицы (при пересохранении таблицы изменения пропадут), либо изменить саму хранимую процедуру.
В данном случае мы будем изменять хранимку, а именно в блоке генерации исходного кода триггера необходимо изменить уровень доступа:
' [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":
' [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 +
после сохранения хранимки, и пересохранения таблиц, которые администрируются по записям, автор будет иметь права только на чтение и изменения.