Active Directory: Получите информацию о Пользователе

Переместите этот метод image_new из photoOutput, как показано ниже,

//target function after saving the images
func image_new(_ image:UIImage,didFinishSavingWithError error : Error?,contextInfo : UnsafeRawPointer)
{
    if let error = error
    {
        let ac = UIAlertController(title: "Save Error",message: error.localizedDescription, preferredStyle: .alert)
        ac.addAction(UIAlertAction(title: "Ok", style: .default))
        present(ac,animated: true)
    }
    else
    {
        let ac = UIAlertController(title: "Saved",message: "Your pic has been saved",preferredStyle: .alert)
        ac.addAction(UIAlertAction(title: "Ok", style: .default))
        present(ac,animated: true)

    }
}

func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto 
photo: AVCapturePhoto, error: Error?) 
{
    if let imageData = photo.fileDataRepresentation() 
    {
        image = UIImage(data: imageData)

        //the code added/////////

        //save the images for test and debug
        UIImageWriteToSavedPhotosAlbum(image,self,#selector(image_new(_:didFinishSavingWithError:contextInfo:)),nil)
        //end

        // the code addedd ends /////

        self.images.append(image!)
        //self.images.append((image?.resized(toWidth: 1200))!)
        let seconds = (currentCamera?.exposureDuration.seconds)!
        self.times.append(Float(seconds * seconds))

        self.takenPhoto = true

        if self.images.count >= self.photoCount 
        {
            self.msg.text = ""
            self.stopRunningCaptureSession()
            self.indicator.startAnimating()
        }
    }
}
10
задан GEOCHET 10 March 2009 в 03:44
поделиться

5 ответов

Доступ к пользователю непосредственно через DirectoryEntry походит на самый простой подход. Вот некоторые связанные с AD лакомые кусочки, которые я узнал из своего первого связанного с AD проекта:

  • В URI запишите LDAP в нижнем регистре. Иначе Вы получите таинственную ошибку. Я провел больше чем день на эту угнетающую проблему...
  • Для очистки однозначного свойства установите его на пустую строку, не пустую. Пустой указатель вызывает исключение.
  • Для очистки многозначного свойства используйте DirectoryEntry. Свойство. Ясный () метод.
  • Ссылка Схемы Active Directory скажет, каким типом данных значение будет и является ли это мультизначением или единственным значением.
  • Вам не нужно к вручную RefreshCache () на Directoryentry, но если Вы когда-нибудь используете его и указываете, который свойства кэшироваться, знайте, что он не автополучит никакие другие свойства в будущем.
  • COMException может быть брошен в абсолютно любое время, Вы используете классы в Системе. DirectoryServices. Следите за теми блоками попытки. Не предполагайте, что что-либо безопасно.

Необходимо будет, вероятно, использовать DirectorySearcher для получения записи каталога пользователя, если Вы не будете знать ее путь (который Вы не были бы, только путем вхождения в систему его). Используя его было довольно легко, но остерегайтесь причуд в синтаксисе LDAP; а именно, имея необходимость закодировать неASCII (и другой?) символы. Строка поиска, которую Вы использовали бы, вероятно, будет чем-то как: (И (sAMAccountName=whatever) (class=user)). Это первое, что пришло на ум и может быть немного неправильно.

Ссылка Схемы Active Directory будет полезна. Действительно поймите, что схема может быть изменена и расширена (например, Exchange установки добавит информацию о почтовых ящиках к пользователям).

AD Проводник является полезным инструментом, который можно использовать для отладки и AD управления данными низкого уровня. Я нашел это полезным, когда я знаю, какое свойство я хочу установить, но не могу найти правильное диалоговое окно в AD инструменте управления.

17
ответ дан 3 December 2019 в 15:36
поделиться

Вы могли бы найти следующий отрывок полезным как начинающий.

public static bool IsUserInGroup(string lanid, string group)
{
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + LDAPPATH);
    if(entry != null)
    {
        entry.Username=@"LDAPUSER";
        entry.Password="LDAPPASSWORD";
        DirectorySearcher srch = new DirectorySearcher(entry);
        srch.Filter = String.Format("(&(objectClass=person)(sAMAccountName={0}))", lanid);
        srch.PropertiesToLoad.Add("memberOf");

        SearchResult result = srch.FindOne();
        if(result != null)
        {
            if(result.Properties.Contains("memberOf"))
            {
                string lookfor = String.Format("cn={0},", group.ToLower());
                foreach(string memberOf in result.Properties["memberOf"])
                {
                    if(memberOf.ToLower().StartsWith(lookfor))
                        return true;
                }
            }
        }
        return false;
    }
    throw new Exception(String.Format("Could not get Directory lanid:{0}, group{1}",   lanid, group));
}
5
ответ дан 3 December 2019 в 15:36
поделиться
5
ответ дан 3 December 2019 в 15:36
поделиться

Взгляните на Систему. Пространство имен DirectoryServices:

Система. Пространство имен DirectoryServices

1
ответ дан 3 December 2019 в 15:36
поделиться

Я пользовался стандартной библиотекой LDAP для получения информации с сервера Active Directory, но необходимо было бы проверить, что данные, в которых Вы нуждаетесь, доступны с помощью схемы сервера LDAP. В целом можно получить любую информацию, хранившую в InetOrganizationalPerson и большей части информации, связанной с группой (группами), которой они принадлежат.

0
ответ дан 3 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: