1// Permissions.h 2 3#ifndef NET_FS_PERMISSIONS_H 4#define NET_FS_PERMISSIONS_H 5 6#include <SupportDefs.h> 7 8enum { 9 // file permissions 10 READ_PERMISSION = 0x01, 11 WRITE_PERMISSION = 0x02, 12 13 // directory permissions 14 READ_DIR_PERMISSION = 0x04, 15 WRITE_DIR_PERMISSION = 0x08, 16 RESOLVE_DIR_ENTRY_PERMISSION = 0x10, 17 18 // share permissions 19 MOUNT_SHARE_PERMISSION = 0x20, 20 QUERY_SHARE_PERMISSION = 0x40, 21 22 // all permissions 23 ALL_PERMISSIONS = 0x7f, 24}; 25 26class Permissions { 27public: 28 inline Permissions(); 29 inline Permissions(uint32 permissions); 30 inline Permissions(const Permissions& other); 31 32 inline uint32 GetPermissions() const; 33 34 inline Permissions& AddPermissions(uint32 permissions); 35 inline Permissions& AddPermissions(Permissions permissions); 36 37 inline bool Implies(uint32 permissions) const; 38 39 inline bool ImpliesReadPermission() const; 40 inline bool ImpliesWritePermission() const; 41 inline bool ImpliesReadDirPermission() const; 42 inline bool ImpliesWriteDirPermission() const; 43 inline bool ImpliesResolveDirEntryPermission() const; 44 inline bool ImpliesMountSharePermission() const; 45 inline bool ImpliesQuerySharePermission() const; 46 47 inline Permissions& operator=(const Permissions& other); 48 inline bool operator==(const Permissions& other) const; 49 inline bool operator!=(const Permissions& other) const; 50 51private: 52 uint32 fPermissions; 53}; 54 55// inline implementation 56 57// constructor 58inline 59Permissions::Permissions() 60 : fPermissions(0) 61{ 62} 63 64// constructor 65inline 66Permissions::Permissions(uint32 permissions) 67 : fPermissions(permissions) 68{ 69} 70 71// copy constructor 72inline 73Permissions::Permissions(const Permissions& other) 74 : fPermissions(other.fPermissions) 75{ 76} 77 78// GetPermissions 79inline 80uint32 81Permissions::GetPermissions() const 82{ 83 return fPermissions; 84} 85 86// AddPermissions 87inline 88Permissions& 89Permissions::AddPermissions(uint32 permissions) 90{ 91 fPermissions |= permissions; 92 return *this; 93} 94 95// AddPermissions 96inline 97Permissions& 98Permissions::AddPermissions(Permissions permissions) 99{ 100 fPermissions |= permissions.fPermissions; 101 return *this; 102} 103 104// Implies 105inline 106bool 107Permissions::Implies(uint32 permissions) const 108{ 109 return ((fPermissions & permissions) == permissions); 110} 111 112// ImpliesReadPermission 113inline 114bool 115Permissions::ImpliesReadPermission() const 116{ 117 return Implies(READ_PERMISSION); 118} 119 120// ImpliesWritePermission 121inline 122bool 123Permissions::ImpliesWritePermission() const 124{ 125 return Implies(WRITE_PERMISSION); 126} 127 128// ImpliesReadDirPermission 129inline 130bool 131Permissions::ImpliesReadDirPermission() const 132{ 133 return Implies(READ_DIR_PERMISSION); 134} 135 136// ImpliesWriteDirPermission 137inline 138bool 139Permissions::ImpliesWriteDirPermission() const 140{ 141 return Implies(WRITE_DIR_PERMISSION); 142} 143 144// ImpliesResolveDirEntryPermission 145inline 146bool 147Permissions::ImpliesResolveDirEntryPermission() const 148{ 149 return Implies(RESOLVE_DIR_ENTRY_PERMISSION); 150} 151 152// ImpliesMountSharePermission 153inline 154bool 155Permissions::ImpliesMountSharePermission() const 156{ 157 return Implies(MOUNT_SHARE_PERMISSION); 158} 159 160// ImpliesQuerySharePermission 161inline 162bool 163Permissions::ImpliesQuerySharePermission() const 164{ 165 return Implies(QUERY_SHARE_PERMISSION); 166} 167 168// = 169inline 170Permissions& 171Permissions::operator=(const Permissions& other) 172{ 173 fPermissions = other.fPermissions; 174 return *this; 175} 176 177// == 178inline 179bool 180Permissions::operator==(const Permissions& other) const 181{ 182 return (fPermissions == other.fPermissions); 183} 184 185// != 186inline 187bool 188Permissions::operator!=(const Permissions& other) const 189{ 190 return (fPermissions != other.fPermissions); 191} 192 193#endif // NET_FS_PERMISSIONS_H 194