CheckPermission.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //------------------------------------------------------------------------------
  2. //
  3. // System.IO.CheckPermission.cs
  4. //
  5. // Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved
  6. //
  7. // Author: Jim Richardson, [email protected]
  8. // Created: Saturday, August 25, 2001
  9. //
  10. // NOTE: All contributors can freely add to this class or make modifications
  11. // that do not break existing usage of methods
  12. //------------------------------------------------------------------------------
  13. using System;
  14. using System.Security;
  15. using System.Security.Permissions;
  16. namespace System.IO
  17. {
  18. /// <summary>
  19. /// A utility class to assist with various permission validation in System.IO
  20. /// </summary>
  21. internal sealed class CheckPermission
  22. {
  23. /// <summary>
  24. /// Generates and exception if caller doesn't have flags access to filesystem item specified by path
  25. /// </summary>
  26. [MonoTODO]
  27. public static void Demand(FileIOPermissionAccess flags, string path)
  28. {
  29. FileIOPermission ioPerm = new FileIOPermission(flags, path);
  30. // FIXME: FileIOPermission is not yet implemented
  31. //ioPerm.Demand();
  32. }
  33. public static void Access(FileAccess access, string path)
  34. {
  35. switch(access)
  36. {
  37. case FileAccess.Read:
  38. Demand(FileIOPermissionAccess.Read, path);
  39. break;
  40. case FileAccess.Write:
  41. Demand(FileIOPermissionAccess.Write, path);
  42. break;
  43. case FileAccess.ReadWrite:
  44. Demand(FileIOPermissionAccess.Read | FileIOPermissionAccess.Write, path);
  45. break;
  46. default:
  47. // TODO: determine what best to do here
  48. throw new ArgumentException("Invalid FileAccess parameter");
  49. }
  50. }
  51. [MonoTODO]
  52. public static void ModeAccess(FileMode mode, FileAccess access, string path, bool exists)
  53. {
  54. #if false
  55. // TODO: this logic isn't entirely complete and accurate, yet
  56. if((mode & (FileMode.CreateNew | FileMode.Create)) != 0)
  57. {
  58. CheckPermission.Demand(FileIOPermissionAccess.Write, Path.GetDirectoryName(path));
  59. }
  60. else if((mode & FileMode.OpenOrCreate) != 0)
  61. {
  62. if(!exists)
  63. {
  64. CheckPermission.Demand(FileIOPermissionAccess.Write, Path.GetDirectoryName(path));
  65. }
  66. else
  67. {
  68. CheckPermission.Access(access, path);
  69. }
  70. }
  71. else if(exists)
  72. {
  73. CheckPermission.Access(access, path);
  74. }
  75. else
  76. {
  77. throw new FileNotFoundException();
  78. }
  79. #endif
  80. }
  81. }
  82. } // namespace System.IO.Private