Рассмотрим часть API ядра Ultima-S. В частности менеджер свойств объектов.
Когда клиент БД желает узнать, какие свойства имеются у объекта, он делает вызов процедуры GetProperties, упрощенный исходный текст которой приведен ниже.
Обратите внимание на вызов процессора событий и на то, что менеджер свойств объектов в соответствии с секретностью пользователя удаляет свойства, на которые у него нет привилегий.
create procedure GetProperties
@UDN int
as
declare @Class varchar(24), @ret int, @Prc varchar(32), @Usr int, @Flg smallint, @No smallint
select @Class=Class from Docs where UDN=@UDN
begin transaction
-- чистим таблицу свойств в начале
delete from Properties where u=@@spid
-- рассылаем событие getp
exec EvProcess 'getp',@Class,'',0,1, @UDN,0,0
-- проверка привилегий (убираются свойства документа, на которые у пользователя нет привилегий)
exec SysStaff @Usr output
declare Prv cursor for select ProcName,Flag,No from Properties where u=@@spid and Flag<3
open Prv
fetch next from Prv into @Prc,@Flg,@No
while @@FETCH_STATUS <> -1 begin
if @@FETCH_STATUS <> -2 begin
select @Class=Class from PropertyClass where No=@No
if @Flg>0 select @Prc=@Prc+'_'+@Class
exec CheckPrivilege @Usr,@Prc,@ret output
if @ret=0 update Properties set Flag=-1 where current of Prv
end
fetch next from Prv into @Prc,@Flg,@No
end
deallocate Prv
delete from Properties where Flag<0
commit transaction
GO