diff options
Diffstat (limited to 'OpenSim/Region/Environment/PermissionManager.cs')
-rw-r--r-- | OpenSim/Region/Environment/PermissionManager.cs | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/OpenSim/Region/Environment/PermissionManager.cs b/OpenSim/Region/Environment/PermissionManager.cs index 9911792..573fc29 100644 --- a/OpenSim/Region/Environment/PermissionManager.cs +++ b/OpenSim/Region/Environment/PermissionManager.cs | |||
@@ -164,7 +164,7 @@ namespace OpenSim.Region.Environment | |||
164 | if (user == objectOwner) | 164 | if (user == objectOwner) |
165 | permission = true; | 165 | permission = true; |
166 | 166 | ||
167 | // If the 'anybody can move' flag is set then allow anyone to move it | 167 | // If the 'anybody can move' flag is set then allow anyone to copy it |
168 | if ((objectflags & (uint)LLObject.ObjectFlags.ObjectCopy ) != 0) | 168 | if ((objectflags & (uint)LLObject.ObjectFlags.ObjectCopy ) != 0) |
169 | permission = true; | 169 | permission = true; |
170 | 170 | ||
@@ -212,7 +212,7 @@ namespace OpenSim.Region.Environment | |||
212 | // Added this because at this point in time it wouldn't be wise for | 212 | // Added this because at this point in time it wouldn't be wise for |
213 | // the administrator object permissions to take effect. | 213 | // the administrator object permissions to take effect. |
214 | LLUUID objectOwner = task.OwnerID; | 214 | LLUUID objectOwner = task.OwnerID; |
215 | uint objectflags = task.RootPart.ObjectFlags; | 215 | uint objectflags = task.RootPart.EveryoneMask; |
216 | 216 | ||
217 | // Object owners should be able to edit their own content | 217 | // Object owners should be able to edit their own content |
218 | if (user == objectOwner) | 218 | if (user == objectOwner) |
@@ -242,6 +242,54 @@ namespace OpenSim.Region.Environment | |||
242 | return permission; | 242 | return permission; |
243 | 243 | ||
244 | } | 244 | } |
245 | public virtual uint GenerateClientFlags(LLUUID user, LLUUID objID) | ||
246 | { | ||
247 | if (!m_scene.Entities.ContainsKey(objID)) | ||
248 | { | ||
249 | return 0; | ||
250 | } | ||
251 | |||
252 | // If it's not an object, we cant edit it. | ||
253 | if (!(m_scene.Entities[objID] is SceneObjectGroup)) | ||
254 | { | ||
255 | return 0; | ||
256 | } | ||
257 | |||
258 | SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objID]; | ||
259 | LLUUID taskOwner = null; | ||
260 | // Added this because at this point in time it wouldn't be wise for | ||
261 | // the administrator object permissions to take effect. | ||
262 | LLUUID objectOwner = task.OwnerID; | ||
263 | uint OwnerMask = task.RootPart.ObjectFlags | task.RootPart.OwnerMask; | ||
264 | uint GroupMask = task.RootPart.ObjectFlags | task.RootPart.GroupMask; | ||
265 | uint EveryoneMask = task.RootPart.ObjectFlags | task.RootPart.EveryoneMask; | ||
266 | |||
267 | if (m_bypassPermissions) | ||
268 | return OwnerMask; | ||
269 | |||
270 | // Object owners should be able to edit their own content | ||
271 | if (user == objectOwner) | ||
272 | return OwnerMask; | ||
273 | |||
274 | // Users should be able to edit what is over their land. | ||
275 | if (m_scene.LandManager.getLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y).landData.ownerID == | ||
276 | user) | ||
277 | return OwnerMask; | ||
278 | |||
279 | // Estate users should be able to edit anything in the sim | ||
280 | if (IsEstateManager(user)) | ||
281 | return OwnerMask; | ||
282 | |||
283 | // Admin objects should not be editable by the above | ||
284 | if (IsAdministrator(taskOwner)) | ||
285 | return EveryoneMask; | ||
286 | |||
287 | // Admin should be able to edit anything in the sim (including admin objects) | ||
288 | if (IsAdministrator(user)) | ||
289 | return OwnerMask; | ||
290 | |||
291 | return 0; | ||
292 | } | ||
245 | 293 | ||
246 | protected virtual bool GenericObjectPermission(LLUUID user, LLUUID objId) | 294 | protected virtual bool GenericObjectPermission(LLUUID user, LLUUID objId) |
247 | { | 295 | { |