protected void AddPrivilege(PrivilegeTempViewModel paretnNode, string privilegeName, List <CurrentUserStatusPrivilege> privileges)
        {
            if (paretnNode.Children.Any())
            {
                privilegeName += paretnNode.Name + "_";
            }
            else
            {
                privilegeName += paretnNode.Name;

                if (paretnNode.IsChecked == true)
                {
                    var directoryPrivilege = BC.GetDirectoryUserStatusPrivilege(privilegeName);
                    privileges.Add(new CurrentUserStatusPrivilege {
                        DirectoryUserStatusPrivilege = directoryPrivilege
                    });
                }
            }

            foreach (var child in paretnNode.Children)
            {
                AddPrivilege(child, privilegeName, privileges);

                if (!child.Children.Any())
                {
                    privilegeName = privilegeName.Substring(0, privilegeName.LastIndexOf("_") + 1);
                }
            }
        }
        private void InitializePrivileges()
        {
            GroupPrivileges = new ObservableCollection <PrivilegeTempViewModel>();

            foreach (var privilege in Enum.GetNames(typeof(UserPrivileges)))
            {
                int indexBeginingParent = 0;
                int countParents        = privilege.Count(c => c == '_');

                var parents = new List <string>();
                for (int i = 0; i < countParents + 1; i++)
                {
                    string parent;
                    if (privilege.IndexOf("_", indexBeginingParent) != -1)
                    {
                        parent = privilege.Substring(indexBeginingParent, privilege.IndexOf("_", indexBeginingParent) - indexBeginingParent);
                    }
                    else
                    {
                        parent = privilege.Substring(indexBeginingParent);
                    }

                    parents.Add(parent);
                    indexBeginingParent = privilege.IndexOf("_", indexBeginingParent) + 1;

                    var mainParent = GroupPrivileges.FirstOrDefault(p => p.Name == parents[0]);
                    if (mainParent == null)
                    {
                        mainParent = new PrivilegeTempViewModel(parents[0]);
                        GroupPrivileges.Add(mainParent);
                        mainParent.Initialize();
                    }

                    var subParent = mainParent;
                    for (int j = 1; j <= i; j++)
                    {
                        var child = subParent.Children.FirstOrDefault(c => c.Name == parents[j]);
                        if (child == null)
                        {
                            child = new PrivilegeTempViewModel(parents[j]);
                            subParent.Children.Add(child);
                        }

                        subParent.Initialize();
                        subParent = subParent.Children.First(c => c.Name == parents[j]);
                    }
                }
            }
        }