ISecuritySnapshot.ApplyFromFile

Синтаксис

ApplyFromFile(FileName: String, [CallBack: ISecuritySnapshotCallback = Null]);

ApplyFromFile(System.String, Prognoz.Platform.Interop.Metabase.ISecuritySnapshotCallback);

Параметры

FileName. Путь к файлу политики безопасности *.pppolicy;

CallBack. Обратный вызов, например, для подтверждения необходимости создания пользователя.

Описание

Метод ApplyFromFile применяет политику безопасности из файла.

Пример

Для выполнения примера предполагается наличие файла политики безопасности «C:\test.pppolicy».

Добавьте ссылки на системные сборки: Metabase, Dal, ForeSystem (для примера на Fore.NET).

Class CSnapBack: SecuritySnapshotCallback

Public Constructor Create;
Begin
End Constructor Create;

Public Sub OnSubjectApply(ApplyState: ApplyStateType; Subject: ISecuritySubject; Var State: Integer);
Begin
    Debug.WriteLine(
"OnSubjectApply " + Subject.Name + " " + CultureInfo.Current.FormatTime(DateTime.Now) + " - " + ApplyState.ToString);
End Sub OnSubjectApply;

Public Sub OnOperation(ApplyOperation: SnapshotApplyOperationType; Var State: Integer);
Begin
    Debug.WriteLine(
"OnOperation: " + CultureInfo.Current.FormatTime(DateTime.Now) + " - " + ApplyOperation.ToString);
End Sub OnOperation;

End Class CSnapBack;


Sub UserProc;
Var
    MB: IMetabase;
    SE: IMetabaseSecurity;
    SS: ISecuritySnapshot;
    SSL: ISecuritySnapshotLog;
    i: Integer;
    CallBack : CSnapBack;
    sFile: String;
    Lic: Object;
Begin
    MB := MetabaseClass.Active;
    
// Получим лицензию для возможности работы с менеджером безопасности
    Lic := MB.RequestLicense(UiLicenseFeatureType.Adm);
    SE := MB.Security;
    SS := SE.NewSnapshot;    
    CallBack := 
New CSnapBack.Create;
    SS.ApplyFromFile(
"C:\test.pppolicy", CallBack);
    SSL := SS.Log;
    
For i := 0 To SSL.Fields.Count - 1 Do
        Debug.Write((SSL.Fields.Item(i).Name 
As String) + " ");
    
End For;
    Debug.WriteLine(
"");
    
While Not SSL.Eof Do
        
For i := 0 To SSL.Fields.Count-1 Do
            
If SSL.Fields.Item(i).Name = "APST"
                
Then
                    
Select Case (SSL.Fields.Item(i).Value As Integer)
                    
Case 0 : Debug.Write("None ");
                    
Case 1 : Debug.Write("Create ");
                    
Case 2 : Debug.Write("Change ");
                    
Case 3 : Debug.Write("Error ");
                    
Case 4 : Debug.Write("Deleted ");
                    
End Select;
                
Else
                    Debug.Write((SSL.Fields.Item(i).Value 
As String) + " ");
            
End If;
        
End For;
        SSL.Next;
        Debug.WriteLine(
"");
    
End While;
    
// Освободим лицензию
    Lic := Null;
End Sub UserProc;

Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.ForeSystem;

Class CSnapBack: ISecuritySnapshotCallback

Public Constructor Create();
Begin
End Constructor Create;

Public Sub OnSubjectApply(ApplyState: ApplyStateType; Subject: ISecuritySubject; Var State: Integer);
Var
    CultureInfo: ICultureInfoClass = 
New CultureInfoClassClass();
Begin
    System.Diagnostics.Debug.WriteLine(
"OnSubjectApply " + Subject.Name + " " + CultureInfo.Current.FormatTime(DateTime.Now) + " - " + ApplyState.ToString());
End Sub OnSubjectApply;

Public Sub OnOperation(ApplyOperation: SnapshotApplyOperationType; Var State: Integer);
Var
    CultureInfo: ICultureInfoClass = 
New CultureInfoClassClass();
Begin
    System.Diagnostics.Debug.WriteLine(
"OnOperation: " + CultureInfo.Current.FormatTime(DateTime.Now) + " - " + ApplyOperation.ToString());
End Sub OnOperation;

End Class CSnapBack;


Public Class Program
    [STAThread]
    
Public Shared Sub Main(Params: StartParams);
    
Var
        MB: IMetabase;
        SE: IMetabaseSecurity;
        SS: ISecuritySnapshot;
        SSL: ISecuritySnapshotLog;
        i: Integer;
        CallBack : CSnapBack;
        sFile: String;
        Lic: Object;
    
Begin
        MB := Params.Metabase;
        
// Получим лицензию для возможности работы с менеджером безопасности
        Lic := MB.RequestLicense(UiLicenseFeatureType.lftAdm);
        SE := MB.Security;
        SS := SE.NewSnapshot();        
        CallBack := 
New CSnapBack.Create();
        SS.ApplyFromFile(
"C:\test.pppolicy", CallBack);
        SSL := SS.Log;
        
For i := 0 To SSL.Fields.Count - 1 Do
            System.Diagnostics.Debug.Write((SSL.Fields.Item[i].Name 
As String) + " ");
        
End For;
        System.Diagnostics.Debug.WriteLine(
"");
        
While Not SSL.Eof() Do
            
For i := 0 To SSL.Fields.Count-1 Do
                
If SSL.Fields.Item[i].Name = "APST"
                    
Then
                        
Select Case (SSL.Fields.Item[i].Value As Integer)
                        
Case 0 : System.Diagnostics.Debug.Write("None ");
                        
Case 1 : System.Diagnostics.Debug.Write("Create ");
                        
Case 2 : System.Diagnostics.Debug.Write("Change ");
                        
Case 3 : System.Diagnostics.Debug.Write("Error ");
                        
Case 4 : System.Diagnostics.Debug.Write("Deleted ");
                        
End Select;
                    
Else
                        System.Diagnostics.Debug.Write((SSL.Fields.Item[i].Value 
As String) + " ");
                
End If;
            
End For;
            SSL.Next();
            System.Diagnostics.Debug.WriteLine(
"");
        
End While;
        
// Освободим лицензию
        Lic := Null;
    
End Sub;
End Class;

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

См. также:

ISecuritySnapshot