manipulação de arquivos com o usuário não administrativo
-
07-07-2019 - |
Pergunta
Eu estive testando meu aplicativo para ver como ele funciona bem quando executado por um usuário não administrativo, e eu ter encontrado problemas com a manipulação de arquivos. Estou recebendo um UnauthorizedAccessException ao tentar substituir um arquivo, se o arquivo foi criado por e usuário Administrativo.
Ao escrever o arquivo I primeiro criar o arquivo como um arquivo .tmp, em seguida, usar File.Copy para substituir o original. O ficheiro.tmp fica criado, mas File.Copy falhar. Meus arquivos são gravados em um diretório público ( "C: \ Documents and Settings \ All Users \ Dados de Aplicativos" no XP).
O que posso fazer para que todos os usuários podem ter o controle total dos arquivos do aplicativo?
Eu encontrei o seguinte:
System.Security.AccessControl.DirectorySecurity sec =
System.IO.Directory.GetAccessControl ( directory );
FileSystemAccessRule accRule = new FileSystemAccessRule ( Globals.userIdentity,
FileSystemRights.FullControl, AccessControlType.Allow );
sec.AddAccessRule ( accRule );
Will fazer o acima para o diretório que todos os arquivos estão localizados em resolver este problema? Ou será que eu tenho que fazer alguma coisa para cada arquivo? Se assim o que é que alguma coisa?
Editar:
usuáriosnão-administrador não pode modificar arquivos criados por um usuário administrador. Isto não é bom. Eu preciso para todos os arquivos para ser editável por todos os usuários. Será que não há algum tipo de permissões que podem ser definidas quando o arquivo é criado originalmente que irá conceder isso?
Solução
Acabei de verificar as permissões sobre os All Users \ Application Data. "Usuários" e "Power Users" ACLs não tem os "Eliminar subpastas e arquivos" permissão.
Eles podem excluir seus próprios arquivos porque o "PROPRIETÁRIO CRIADOR" ACL tem controle total.
Quanto à forma de contornar esta situação, você poderia dar a todos todo o acesso, mas uma idéia melhor seria conceder os "Usuários" e "Power Users" ACLs os "Eliminar subpastas e arquivos" permissão em diretório AppData do seu aplicativo.
Como alternativa, você pode atribuir os "Excluir" e permissões "Modificar" no próprio arquivo para "Usuários" e "usuários avançados", quando ele é criado.
Outras dicas
Este código daria os direitos de acesso completo de utilizador para a pasta, no entanto, isso pode falhar em segurança novamente.
A melhor maneira de certificar-se de sua aplicação sempre pode armazenar informações é através do IsolatedStorage. No entanto, se você precisa de acesso a seus arquivos fora de seu aplicativo, em seguida, esta não é a melhor solução.
Que tal se você usar código semelhante para dar a todos o acesso completo para o arquivo depois que ele foi criado? Se eu entendi corretamente os arquivos sempre será criado com a sua aplicação, certo? Em seguida, o usuário que cria o arquivo em primeiro lugar também terá direitos para ajustar as configurações de segurança para o arquivo. Então é só uma questão de definir direitos públicos para o arquivo, uma vez que é criado e todos os usuários são capazes de substituir o arquivo mais tarde.