IMetabaseUpdateMandatoryAccess.Category

Синтаксис Fore

Category: IMetabaseUpdateSecurityCategory;

Синтаксис Fore.NET

Category: Prognoz.Platform.Interop.Metabase.IMetabaseUpdateSecurityCategory;

Описание

Свойство Category возвращает категорию по индексу.

Пример Fore

Для выполнения примера добавьте ссылки на системные сборки «Metabase» и  «Stat». Предполагается наличие файла обновления "D:\Update.pefx".

Sub main;
Var
    Mb: IMetabase;
    Upd: IMetabaseUpdate;
Begin   
    MB := MetabaseClass.Active;
    Upd := Mb.CreateUpdate;
    Upd.LoadFromFileNF("D:\Update.pefx");
    Upd.Prepare;
    updateMandatory(Upd);
    Upd.SaveAvailable("D:\Update.pefx");
End Sub main;

Sub updateMandatory (update: IMetabaseUpdate);
    Var
        muma: IMetabaseUpdateMandatoryAccess;
        musc: IMetabaseUpdateSecurityCategory;
        musl: IMetabaseUpdateSecurityLevel;
        i, j: integer;
        mma: IMetabaseMandatoryAccess;
        Mb: IMetabase;      
    Begin
        Mb := MetabaseClass.Active;     
        muma := update.MandatoryAccess;
        mma := Mb.Security.Policy.MandatoryAccess;
        debug.WriteLine("Включен ли Мандатный контроль в базе заказчика:  "+Mb.Security.Policy.MandatoryAccessControl.ToString);
        For i := 0 To muma.CategoryCount - 1 Do
            musc := muma.Category(i);
            If musc.Exists.ToString <> "True" Then
                debug.WriteLine("Необходимо добавление новой категории:  "+musc.Name);
            Else
            debug.WriteLine("Наименование категории в базе заказчика:  "+musc.Name);
            debug.WriteLine("Ключ категории в базе заказчика:  "+musc.Key.ToString);
            debug.WriteLine("Доступность категории в базе заказчика:  "+musc.IsValid.ToString);
            For j := 0 To musc.LevelCount - 1 Do
                musl := musc.Level(j);
                If musl.Exists.ToString <> "True" Then
                    debug.WriteLine("Необходимо добавление нового уровня категории:  "+musl.Name+" ("+musl.Category.Name+")");
                Else
                debug.WriteLine("Наименование уровня безопасности (категория) в базе заказчика:  "+musc.FindLevelByLabel(musl.Index).Name+" ("+musl.Category.Name+")");
                debug.WriteLine("Существование уровня безопасности в базе заказчика:  "+musc.Level(j).Exists.ToString+ " Метка уровня безопасности:  "+musl.CriticalityLabel.ToString);
                debug.WriteLine("Описание уровня безопасности в базе заказчика:  "+musl.Description);
                debug.WriteLine("Доступность уровня безопасности в базе заказчика:  "+musl.IsValid.ToString);
                End If;
            End For;
            End If;
        End For;
End Sub updateMandatory;

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

Пример Fore.NET

Для выполнения примера добавьте ссылки на системные сборки «Metabase» и  «Stat». Предполагается наличие файла обновления "D:\Update.pefx".

Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Upd: IMetabaseUpdate;
Begin   
    MB := Params.Metabase;
    Upd := MB.CreateUpdate();
    Upd.LoadFromFileNF("D:\""Update.pefx",UpdateLoadMode.ulmReplace);
    Upd.Prepare();
    updateMandatory(MB, Upd);
    Upd.SaveAvailable("D:\""Update.pefx",MetabaseUpdateCopyType.muctAvailable);
End Sub main;

Shared Sub updateMandatory (MB: IMetabase; update: IMetabaseUpdate);
    Var
        muma: IMetabaseUpdateMandatoryAccess;
        musc: IMetabaseUpdateSecurityCategory;
        musl: IMetabaseUpdateSecurityLevel;
        i, j: integer;
        mma: IMetabaseMandatoryAccess;
    Begin
        muma := update.MandatoryAccess;
        mma := MB.Security.Policy.MandatoryAccess;
        System.Diagnostics.Debug.WriteLine("Включен ли Мандатный контроль в базе заказчика:  "+MB.Security.Policy.MandatoryAccessControl.ToString());
        For i := 0 To muma.CategoryCount - 1 Do
            musc := muma.Category[i];
            If musc.Exists.ToString() <> "True" Then
                System.Diagnostics.Debug.WriteLine("Необходимо добавление новой категории:  "+musc.Name);
            Else
            System.Diagnostics.Debug.WriteLine("Наименование категории в базе заказчика:  "+musc.Name);
            System.Diagnostics.Debug.WriteLine("Ключ категории в базе заказчика:  "+musc.Key.ToString());
            System.Diagnostics.Debug.WriteLine("Доступность категории в базе заказчика:  "+musc.IsValid.ToString());
            For j := 0 To musc.LevelCount - 1 Do
                musl := musc.Level[j];
                If musl.Exists.ToString() <> "True" Then
                    System.Diagnostics.Debug.WriteLine("Необходимо добавление нового уровня категории:  "+musl.Name+" ("+musl.Category.Name+")");   
                Else
                System.Diagnostics.Debug.WriteLine("Наименование уровня безопасности (категория) в базе заказчика:  "+musc.FindLevelByLabel(musl.Index As uinteger).Name+" ("+musl.Category.Name+")");
                System.Diagnostics.Debug.WriteLine("Существование уровня безопасности в базе заказчика:  "+musc.Level[j].Exists.ToString()+ " Метка уровня безопасности:  "+musl.CriticalityLabel.ToString());
                System.Diagnostics.Debug.WriteLine("Описание уровня безопасности в базе заказчика:  "+musl.Description);
                System.Diagnostics.Debug.WriteLine("Доступность уровня безопасности в базе заказчика:  "+musl.IsValid.ToString());
                End If;
            End For;
            End If;
        End For;
End Sub updateMandatory;

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

См. также:

IMetabaseUpdateMandatoryAccess