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