Как защитить файлы с помощью выборочного удаления (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.
});
}