Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ModifyAccess()

override bool System.Security.AccessControl.CommonObjectSecurity.ModifyAccess ( AccessControlModification modification,
AccessRule rule,
out bool modified )
inlineprotectedinherited

Definition at line 120 of file CommonObjectSecurity.cs.

121 {
122 if (rule == null)
123 {
124 throw new ArgumentNullException("rule");
125 }
126 WriteLock();
127 try
128 {
129 bool flag = true;
131 {
132 if (modification == AccessControlModification.Remove || modification == AccessControlModification.RemoveAll || modification == AccessControlModification.RemoveSpecific)
133 {
134 modified = false;
135 return flag;
136 }
137 _securityDescriptor.DiscretionaryAcl = new DiscretionaryAcl(base.IsContainer, base.IsDS, GenericAcl.AclRevision, 1);
138 _securityDescriptor.AddControlFlags(ControlFlags.DiscretionaryAclPresent);
139 }
140 SecurityIdentifier sid = (SecurityIdentifier)rule.IdentityReference.Translate(typeof(SecurityIdentifier));
141 if (rule.AccessControlType == AccessControlType.Allow)
142 {
143 switch (modification)
144 {
146 _securityDescriptor.DiscretionaryAcl.AddAccess(AccessControlType.Allow, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
147 break;
149 _securityDescriptor.DiscretionaryAcl.SetAccess(AccessControlType.Allow, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
150 break;
151 case AccessControlModification.Reset:
153 _securityDescriptor.DiscretionaryAcl.SetAccess(AccessControlType.Allow, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
154 break;
155 case AccessControlModification.Remove:
156 flag = _securityDescriptor.DiscretionaryAcl.RemoveAccess(AccessControlType.Allow, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
157 break;
158 case AccessControlModification.RemoveAll:
159 flag = _securityDescriptor.DiscretionaryAcl.RemoveAccess(AccessControlType.Allow, sid, -1, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None);
160 if (!flag)
161 {
162 throw new InvalidOperationException();
163 }
164 break;
165 case AccessControlModification.RemoveSpecific:
166 _securityDescriptor.DiscretionaryAcl.RemoveAccessSpecific(AccessControlType.Allow, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
167 break;
168 default:
169 throw new ArgumentOutOfRangeException("modification", System.SR.ArgumentOutOfRange_Enum);
170 }
171 }
172 else
173 {
174 if (rule.AccessControlType != AccessControlType.Deny)
175 {
176 throw new ArgumentException(System.SR.Format(System.SR.Arg_EnumIllegalVal, (int)rule.AccessControlType), "rule");
177 }
178 switch (modification)
179 {
181 _securityDescriptor.DiscretionaryAcl.AddAccess(AccessControlType.Deny, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
182 break;
184 _securityDescriptor.DiscretionaryAcl.SetAccess(AccessControlType.Deny, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
185 break;
186 case AccessControlModification.Reset:
188 _securityDescriptor.DiscretionaryAcl.SetAccess(AccessControlType.Deny, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
189 break;
190 case AccessControlModification.Remove:
191 flag = _securityDescriptor.DiscretionaryAcl.RemoveAccess(AccessControlType.Deny, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
192 break;
193 case AccessControlModification.RemoveAll:
195 if (!flag)
196 {
197 throw new InvalidOperationException();
198 }
199 break;
200 case AccessControlModification.RemoveSpecific:
201 _securityDescriptor.DiscretionaryAcl.RemoveAccessSpecific(AccessControlType.Deny, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags);
202 break;
203 default:
204 throw new ArgumentOutOfRangeException("modification", System.SR.ArgumentOutOfRange_Enum);
205 }
206 }
207 modified = flag;
208 base.AccessRulesModified |= modified;
209 return flag;
210 }
211 finally
212 {
213 WriteUnlock();
214 }
215 }
static string Arg_EnumIllegalVal
Definition SR.cs:144
static string ArgumentOutOfRange_Enum
Definition SR.cs:18
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
Definition SR.cs:7
void AddAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
void SetAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
void RemoveAccessSpecific(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
bool RemoveAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
readonly CommonSecurityDescriptor _securityDescriptor

References System.Security.AccessControl.ObjectSecurity< T >._securityDescriptor, System.Security.AccessControl.AccessRule< T >.AccessControlType, System.Security.AccessControl.AuthorizationRule.AccessMask, System.Security.AccessControl.GenericAcl.AclRevision, System.Security.AccessControl.DiscretionaryAcl.AddAccess(), System.Security.AccessControl.CommonSecurityDescriptor.AddControlFlags(), System.SR.Arg_EnumIllegalVal, System.SR.ArgumentOutOfRange_Enum, System.Security.AccessControl.CommonSecurityDescriptor.DiscretionaryAcl, System.Security.AccessControl.DiscretionaryAcl, System.SR.Format(), System.Security.AccessControl.AuthorizationRule.IdentityReference, System.Security.AccessControl.AuthorizationRule.InheritanceFlags, System.Security.AccessControl.AuthorizationRule.PropagationFlags, System.Security.AccessControl.DiscretionaryAcl.RemoveAccess(), System.Security.AccessControl.DiscretionaryAcl.RemoveAccessSpecific(), System.Security.AccessControl.DiscretionaryAcl.SetAccess(), System.Security.Principal.IdentityReference.Translate(), System.Security.AccessControl.ObjectSecurity< T >.WriteLock(), and System.Security.AccessControl.ObjectSecurity< T >.WriteUnlock().

Referenced by System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(), System.Security.AccessControl.CommonObjectSecurity.RemoveAccessRule(), System.Security.AccessControl.CommonObjectSecurity.RemoveAccessRuleAll(), System.Security.AccessControl.CommonObjectSecurity.RemoveAccessRuleSpecific(), System.Security.AccessControl.CommonObjectSecurity.ResetAccessRule(), and System.Security.AccessControl.CommonObjectSecurity.SetAccessRule().