Работа со списками управления доступом

Много приложений, использующих в своих интересах идентификационные данные, используют их для управления доступом к файлу или службе. Идентификационные данные и их уровни доступа часто сохранены в списке управления доступом (ACL). Следующая глава объясняет, как создать ACL, сохранить ее и загрузить ее для использования позже.

Создание ACL

ACL может сохраняться в любом объекте данных, который Вы хотите. Этот объект данных должен быть адаптирован на основе потребностей Вашего приложения. Например, если Ваше приложение должно сохранить список только тех пользователей и групп, которые могут получить доступ к Вашей службе, затем простой массив или установить, может быть достаточным. Однако, если Ваше приложение должно сохранить список идентификационных данных и их уровня доступа, Вы могли бы хотеть использовать словарь. Перечисление 4-1 показывает, как создать объект словаря для Вас ACL и затем выполнить средство выбора идентификационных данных. Идентификационные данные, возвращенные из средства выбора, сохранены в объекте словаря как пара ключ/значение, где ключ является идентификационными данными, и значение является полномочиями.

Перечисление 4-1  , Создающее ACL с платформой Сотрудничества

// Create a dictionary to use as your ACL
NSMutableDictionary *accessControlList = [[NSMutableDictionary alloc] init];
 
// Run the identity picker
if ([picker runModal] == NSOKButton) {
    NSArray *identities = [picker identities];
    NSEnumerator *enumerator = [identities objectEnumerator];
 
 
    // Enumerate over the returned identities,
    // and add each one to the ACL
    while ((nextIdentity = [enumerator nextObject])) {
 
        // Make sure to use the identity object as the key, and the permissions level as the value
        [accessControlList setObject:@"read-only" forKey:nextIdentity];
    }
}

При использовании Идентификационных данных Core Services API можно создать подобный ACL с a CFDictionary объект, с помощью CSIdentity объекты как ключи.

Запись ACL к файлу

Когда Ваше приложение выходит, оно должно сохранить ACL как файл. Если Ваш ACL сохранен как NSDictionary объект, просто используйте метод writeToFile:atomically: записать ACL в plist файл. Когда файл записан, каждые идентификационные данные сохранены как персистентная ссылка. Персистентная ссылка идентификационных данных является непрозрачным объектом данных, который является более быстрым, более надежным способом получить идентификационные данные от полномочий идентификационных данных, чем UUID.

Если Вы не используете словарь для корпуса ACL, используйте персистентную ссылку, когда Вы пишете ACL в файл. В платформе Сотрудничества используйте метод persistentReference создать персистентную ссылку для идентификационных данных или использовать NSCoding методы протокола. В Идентификационных данных Core Services API используйте CSIdentityCreatePersistentReference метод.

Загрузка ACL

После записи ACL в файл приложение должно восстановить ACL к форме, к которой оно может получить доступ быстро. Если Вы используете NSDictionary возразите, инстанцируйте нового объекта с dictionaryWithContentsOfFile: метод. Точно так же, если Вы использовали NSCoding методы протокола для архивации ACL используйте надлежащие методы для разархивирования ACL. Любой подход также преобразует персистентную ссылку на объект идентификационных данных автоматически, таким образом, можно будет начать использовать новый объект словаря сразу. Если идентификационные данные в ACL были удалены, никакое преобразование не будет иметь место.

Если бы Вы записали ACL в пользовательский формат файла, то необходимо загрузить файл назад в память и загрузить каждую персистентную ссылку. Можно инстанцировать объекта идентификационных данных из персистентной ссылки с identityWithPersistentReference: метод.

При получении объекта идентификационных данных в Core Services немного более включается API. Как только Вы имеете presistent ссылку, создаете объект запроса идентификационных данных с помощью CSIdentityQueryCreateForPersistentReference метод. Тогда выполните запрос и получите возвращенные объекты идентификационных данных. (Для получения дополнительной информации о запросах полномочий идентификационных данных, посмотрите Нахождение и Контроль Идентификационных данных).