diff options
Diffstat (limited to 'OpenSim/Region/Environment/PermissionManager.cs')
-rw-r--r-- | OpenSim/Region/Environment/PermissionManager.cs | 60 |
1 files changed, 42 insertions, 18 deletions
diff --git a/OpenSim/Region/Environment/PermissionManager.cs b/OpenSim/Region/Environment/PermissionManager.cs index db1cac5..f72ae66 100644 --- a/OpenSim/Region/Environment/PermissionManager.cs +++ b/OpenSim/Region/Environment/PermissionManager.cs | |||
@@ -172,48 +172,72 @@ namespace OpenSim.Region.Environment | |||
172 | 172 | ||
173 | //return task.RootPart.ObjectFlags;task.RootPart.ObjectFlags | | 173 | //return task.RootPart.ObjectFlags;task.RootPart.ObjectFlags | |
174 | 174 | ||
175 | uint OwnerMask = task.RootPart.ObjectFlags | task.RootPart.OwnerMask; | 175 | uint objectOwnerMask = task.RootPart.ObjectFlags; |
176 | uint GroupMask = task.RootPart.ObjectFlags | task.RootPart.GroupMask; | 176 | |
177 | uint EveryoneMask = task.RootPart.ObjectFlags | task.RootPart.EveryoneMask; | 177 | if((task.RootPart.OwnerMask & (uint)PermissionMask.Copy) != 0) |
178 | { | ||
179 | objectOwnerMask |= (uint)LLObject.ObjectFlags.ObjectCopy; | ||
180 | } | ||
181 | |||
182 | if ((task.RootPart.OwnerMask & (uint) PermissionMask.Move) != 0) | ||
183 | { | ||
184 | objectOwnerMask |= (uint)LLObject.ObjectFlags.ObjectMove; | ||
185 | } | ||
186 | |||
187 | if ((task.RootPart.OwnerMask & (uint) PermissionMask.Modify) != 0) | ||
188 | { | ||
189 | objectOwnerMask |= (uint)LLObject.ObjectFlags.ObjectModify; | ||
190 | } | ||
191 | |||
192 | if ((task.RootPart.OwnerMask & (uint) PermissionMask.Transfer) != 0) | ||
193 | { | ||
194 | objectOwnerMask |= (uint)LLObject.ObjectFlags.ObjectTransfer; | ||
195 | } | ||
196 | |||
197 | uint objectGroupMask = task.RootPart.ObjectFlags | task.RootPart.GroupMask; | ||
198 | uint objectEveryoneMask = task.RootPart.ObjectFlags | task.RootPart.EveryoneMask; | ||
178 | 199 | ||
179 | if (m_bypassPermissions) | 200 | if (m_bypassPermissions) |
180 | return OwnerMask; | 201 | return objectOwnerMask; |
181 | 202 | ||
182 | // Object owners should be able to edit their own content | 203 | // Object owners should be able to edit their own content |
183 | if (user == objectOwner) | 204 | if (user == objectOwner) |
184 | return OwnerMask; | 205 | { |
206 | objectOwnerMask |= (uint)LLObject.ObjectFlags.ObjectYouOwner; | ||
207 | return objectOwnerMask; | ||
208 | } | ||
185 | 209 | ||
186 | // Users should be able to edit what is over their land. | 210 | // Users should be able to edit what is over their land. |
187 | Land parcel = m_scene.LandManager.getLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y); | 211 | Land parcel = m_scene.LandManager.getLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y); |
188 | if (parcel != null && parcel.landData.ownerID == user) | 212 | if (parcel != null && parcel.landData.ownerID == user) |
189 | return OwnerMask; | 213 | return objectOwnerMask; |
190 | 214 | ||
191 | // Estate users should be able to edit anything in the sim | 215 | // Estate users should be able to edit anything in the sim |
192 | if (IsEstateManager(user)) | 216 | if (IsEstateManager(user)) |
193 | return OwnerMask; | 217 | return objectOwnerMask; |
194 | 218 | ||
195 | // Admin objects should not be editable by the above | 219 | // Admin objects should not be editable by the above |
196 | if (IsAdministrator(taskOwner)) | 220 | if (IsAdministrator(taskOwner)) |
197 | return EveryoneMask; | 221 | return objectEveryoneMask; |
198 | 222 | ||
199 | // Admin should be able to edit anything in the sim (including admin objects) | 223 | // Admin should be able to edit anything in the sim (including admin objects) |
200 | if (IsAdministrator(user)) | 224 | if (IsAdministrator(user)) |
201 | return OwnerMask; | 225 | return objectOwnerMask; |
202 | 226 | ||
203 | if (((EveryoneMask & PERM_MOVE) != 0) || ((EveryoneMask & PERM_COPY) != 0)) | 227 | if (((objectEveryoneMask & PERM_MOVE) != 0) || ((objectEveryoneMask & PERM_COPY) != 0)) |
204 | { | 228 | { |
205 | if ((EveryoneMask & PERM_MOVE) != 0) | 229 | if ((objectEveryoneMask & PERM_MOVE) != 0) |
206 | OwnerMask &= ~PERM_MOVE; | 230 | objectOwnerMask &= ~PERM_MOVE; |
207 | 231 | ||
208 | if ((EveryoneMask & PERM_COPY) != 0) | 232 | if ((objectEveryoneMask & PERM_COPY) != 0) |
209 | OwnerMask &= ~PERM_COPY; | 233 | objectOwnerMask &= ~PERM_COPY; |
210 | 234 | ||
211 | OwnerMask &= ~PERM_MODIFY; | 235 | objectOwnerMask &= ~PERM_MODIFY; |
212 | OwnerMask &= ~PERM_TRANS; | 236 | objectOwnerMask &= ~PERM_TRANS; |
213 | 237 | ||
214 | return OwnerMask; | 238 | return objectOwnerMask; |
215 | } | 239 | } |
216 | return EveryoneMask; | 240 | return objectEveryoneMask; |
217 | } | 241 | } |
218 | 242 | ||
219 | protected virtual bool GenericObjectPermission(LLUUID user, LLUUID objId) | 243 | protected virtual bool GenericObjectPermission(LLUUID user, LLUUID objId) |