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;
После выполнения примера в консоль будет выведена информация о произведенных операциях во время применения политики безопасности, а также подробный список групп/пользователей и действий, произведенных над ними.
См. также: