Как защитить файлы с помощью выборочного удаления (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Выборочная очистка позволяет определить в приложении защищаемые файлы, которые можно удалить, когда пользователь приложения теряет право на использование данных из приложения. Так часто случается в организациях, которые разрешают сотрудникам приносить собственные устройства на работу. Когда сотрудник покидает компанию, можно обеспечить удаление файлов компании с личного устройства сотрудника.

Например, допустим, сотрудник приносит личный планшетный компьютер в офис и использует его для работы с электронной почтой компании. Почтовое приложение может защищать все файлы, которые используются в сообщениях электронной почты компании локально на компьютере с помощью выборочной очистки. Такие файлы связываются с компанией с помощью корпоративного идентификатора, например "sample.com". Если пользователь перестает работать в компании, то в следующий раз, когда он открывает корпоративное почтовое приложение, оно может определить, что пользователь больше не является сотрудником, и посредством выборочной очистки запретить доступ ко всем защищенным файлам с данным корпоративным идентификатором. Если приложение пытается получить доступ к файлу и обнаруживает, что доступ запрещен, то оно может удалить такой файл.

Необходимые условия

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

    var appRootFolder = Windows.Storage.ApplicationData.current;
    var enterpriseIdentity = "example.com";
    var accessDeniedHResult = -2147024891;  // Access Denied (0x80070005)
    

Защита файла или папки с помощью выборочной очистки

Метод protectAsync позволяет защитить файл или папку с помощью выборочной очистки. Он определяет файл как защищаемый для корпоративного идентификатора, например "example.com", как показано в предыдущем примере кода. Если метод protectAsync применяется для защиты папки, то все файлы в этой папке получают такую же защиту.

// Add a folder and protect it using Selective Wipe.
function addFolder(folderName) {
    appRootFolder.localFolder.createFolderAsync(folderName).then(
        function (newFolder) {
            protectItem(newFolder);
        });
}

// Add a file and protect it using Selective Wipe.
function addFile(fileName, folder) {
    folder.createFileAsync(fileName).then(
        function (newFile) {
            Windows.Security.EnterpriseData.
                FileRevocationManager.getStatusAsync(newFile).then(
                    function (status) {
                        if (status != Windows.Security.EnterpriseData.
                                FileProtectionStatus.Protected) {
                            protectItem(newFile, enterpriseIdentity);
                        }
                    });
        },
        function (err) {
            // Handle error. For example, file already exists.
        });
}

function protectItem(item, enterpriseIdentity) {
    Windows.Security.EnterpriseData.FileRevocationManager.
        protectAsync(item, enterpriseIdentity).then(
            function (status) {
                return status;
            });
}

Запрет доступа к защищенным файлам и папкам

Если приложение определяет, что пользователь утратил свои права, вы можете быстро запретить доступ ко всем файлам и папкам, защищаемым по корпоративному идентификатору, с помощью метода revoke, как показано в следующем примере. Метод revoke не удаляет файл. Метод revoke переводит файл в состояние, исключающее доступ. Вы можете добавить в свое приложение код, который будет удалять файл, к которому запрещен доступ, как показано в следующем примере.

function initializeApp(userName) {
    if (getUserStatus(userName) == "Not Found") {
        Windows.Security.EnterpriseData.FileRevocationManager.revoke(enterpriseIdentity);
    }
}

Получение состояния файла

Метод getStatusAsync позволяет определить состояние защиты с помощью выборочной очистки для файла или папки. Он сообщает, является ли файл защищенным, включена ли защита для файла другим пользователем на компьютере, а также другие сведения. Метод getStatusAsync часто используется, чтобы определить, следует ли удалить защищенный файл. Например, если доступ к защищенному файлу запрещен, то при попытке доступа к содержимому файла создается исключение "Отказано в доступе". Когда обнаруживается такое исключение, вы можете использовать метод getStatusAsync, чтобы определить, запрещен ли доступ к файлу с помощью выборочной очистки, и, если это так, удалить этот файл, как показано в следующем примере.

function getFileContents(filePath) {
    var stream;
    var file;

    Windows.Storage.StorageFile.getFileFromPathAsync(filePath).then(
        function (f) {
            file = f;
            file.openReadAsync().then(
                function (s) {
                    stream = s;
                    return stream;
                },
                function (err) {
                    if (err.number == accessDeniedHResult) {
                        // Delete file if it has been revoked.
                        selectiveWipeCleanup(file);
                    }
                });
        });

    return null;
}

// Delete items revoked by Selective Wipe.
function selectiveWipeCleanup(file) {
    Windows.Security.EnterpriseData.FileRevocationManager.
        getStatusAsync(file).then(
            function (status) {
                if (status == 
                    Windows.Security.EnterpriseData.FileProtectionStatus.revoked) {
                        file.deleteAsync();
                }
        });

}

Копирование защищенного файла

Когда файл копируется методом copyAsync или copyAndReplaceAsync, то защита выборочной очистки для копируемого файла не применяется автоматически к новой копии файла. Это относится к файлам, которые сохраняются с новым именем с помощью команды "Сохранить как". В этом случае можно скопировать защиту выборочной очистки из исходного файла с помощью метода copyProtectionAsync, как показано в следующем примере.

function copyFile(file, newFolder) {
    file.copyAsync(newFolder).then(
        function (newFile) {
            Windows.Security.EnterpriseData.FileRevocationManager.
                copyProtectionAsync(file, newFile);
        },
        function (err) {
            // Handle error. For example, copy already exists.
        });
}

Полный пример

Связанные разделы

Пример FileRevocationManager

Windows.Security.EnterpriseData namespace

Защита приложений