diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Permissions')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | 89 |
1 files changed, 87 insertions, 2 deletions
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 1d70546..bc54997 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -164,6 +164,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
164 | private Dictionary<string, bool> GrantYP = new Dictionary<string, bool>(); | 164 | private Dictionary<string, bool> GrantYP = new Dictionary<string, bool>(); |
165 | private IFriendsModule m_friendsModule; | 165 | private IFriendsModule m_friendsModule; |
166 | private IGroupsModule m_groupsModule; | 166 | private IGroupsModule m_groupsModule; |
167 | private IMoapModule m_moapModule; | ||
167 | 168 | ||
168 | #endregion | 169 | #endregion |
169 | 170 | ||
@@ -177,7 +178,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
177 | 178 | ||
178 | string permissionModules = myConfig.GetString("permissionmodules", "DefaultPermissionsModule"); | 179 | string permissionModules = myConfig.GetString("permissionmodules", "DefaultPermissionsModule"); |
179 | 180 | ||
180 | List<string> modules=new List<string>(permissionModules.Split(',')); | 181 | List<string> modules = new List<string>(permissionModules.Split(',')); |
181 | 182 | ||
182 | if (!modules.Contains("DefaultPermissionsModule")) | 183 | if (!modules.Contains("DefaultPermissionsModule")) |
183 | return; | 184 | return; |
@@ -249,6 +250,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
249 | m_scene.Permissions.OnDeleteUserInventory += CanDeleteUserInventory; //NOT YET IMPLEMENTED | 250 | m_scene.Permissions.OnDeleteUserInventory += CanDeleteUserInventory; //NOT YET IMPLEMENTED |
250 | 251 | ||
251 | m_scene.Permissions.OnTeleport += CanTeleport; //NOT YET IMPLEMENTED | 252 | m_scene.Permissions.OnTeleport += CanTeleport; //NOT YET IMPLEMENTED |
253 | |||
254 | m_scene.Permissions.OnControlPrimMedia += CanControlPrimMedia; | ||
255 | m_scene.Permissions.OnInteractWithPrimMedia += CanInteractWithPrimMedia; | ||
252 | 256 | ||
253 | m_scene.AddCommand(this, "bypass permissions", | 257 | m_scene.AddCommand(this, "bypass permissions", |
254 | "bypass permissions <true / false>", | 258 | "bypass permissions <true / false>", |
@@ -394,6 +398,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
394 | 398 | ||
395 | if (m_groupsModule == null) | 399 | if (m_groupsModule == null) |
396 | m_log.Warn("[PERMISSIONS]: Groups module not found, group permissions will not work"); | 400 | m_log.Warn("[PERMISSIONS]: Groups module not found, group permissions will not work"); |
401 | |||
402 | m_moapModule = m_scene.RequestModuleInterface<IMoapModule>(); | ||
403 | |||
404 | // This log line will be commented out when no longer required for debugging | ||
405 | // if (m_moapModule == null) | ||
406 | // m_log.Warn("[PERMISSIONS]: Media on a prim module not found, media on a prim permissions will not work"); | ||
397 | } | 407 | } |
398 | 408 | ||
399 | public void Close() | 409 | public void Close() |
@@ -1894,5 +1904,80 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1894 | } | 1904 | } |
1895 | return(false); | 1905 | return(false); |
1896 | } | 1906 | } |
1907 | |||
1908 | private bool CanControlPrimMedia(UUID agentID, UUID primID, int face) | ||
1909 | { | ||
1910 | // m_log.DebugFormat( | ||
1911 | // "[PERMISSONS]: Performing CanControlPrimMedia check with agentID {0}, primID {1}, face {2}", | ||
1912 | // agentID, primID, face); | ||
1913 | |||
1914 | if (null == m_moapModule) | ||
1915 | return false; | ||
1916 | |||
1917 | SceneObjectPart part = m_scene.GetSceneObjectPart(primID); | ||
1918 | if (null == part) | ||
1919 | return false; | ||
1920 | |||
1921 | MediaEntry me = m_moapModule.GetMediaEntry(part, face); | ||
1922 | |||
1923 | // If there is no existing media entry then it can be controlled (in this context, created). | ||
1924 | if (null == me) | ||
1925 | return true; | ||
1926 | |||
1927 | // m_log.DebugFormat( | ||
1928 | // "[PERMISSIONS]: Checking CanControlPrimMedia for {0} on {1} face {2} with control permissions {3}", | ||
1929 | // agentID, primID, face, me.ControlPermissions); | ||
1930 | |||
1931 | return GenericPrimMediaPermission(part, agentID, me.ControlPermissions); | ||
1932 | } | ||
1933 | |||
1934 | private bool CanInteractWithPrimMedia(UUID agentID, UUID primID, int face) | ||
1935 | { | ||
1936 | // m_log.DebugFormat( | ||
1937 | // "[PERMISSONS]: Performing CanInteractWithPrimMedia check with agentID {0}, primID {1}, face {2}", | ||
1938 | // agentID, primID, face); | ||
1939 | |||
1940 | if (null == m_moapModule) | ||
1941 | return false; | ||
1942 | |||
1943 | SceneObjectPart part = m_scene.GetSceneObjectPart(primID); | ||
1944 | if (null == part) | ||
1945 | return false; | ||
1946 | |||
1947 | MediaEntry me = m_moapModule.GetMediaEntry(part, face); | ||
1948 | |||
1949 | // If there is no existing media entry then it can be controlled (in this context, created). | ||
1950 | if (null == me) | ||
1951 | return true; | ||
1952 | |||
1953 | // m_log.DebugFormat( | ||
1954 | // "[PERMISSIONS]: Checking CanInteractWithPrimMedia for {0} on {1} face {2} with interact permissions {3}", | ||
1955 | // agentID, primID, face, me.InteractPermissions); | ||
1956 | |||
1957 | return GenericPrimMediaPermission(part, agentID, me.InteractPermissions); | ||
1958 | } | ||
1959 | |||
1960 | private bool GenericPrimMediaPermission(SceneObjectPart part, UUID agentID, MediaPermission perms) | ||
1961 | { | ||
1962 | // if (IsAdministrator(agentID)) | ||
1963 | // return true; | ||
1964 | |||
1965 | if ((perms & MediaPermission.Anyone) == MediaPermission.Anyone) | ||
1966 | return true; | ||
1967 | |||
1968 | if ((perms & MediaPermission.Owner) == MediaPermission.Owner) | ||
1969 | { | ||
1970 | if (agentID == part.OwnerID) | ||
1971 | return true; | ||
1972 | } | ||
1973 | |||
1974 | if ((perms & MediaPermission.Group) == MediaPermission.Group) | ||
1975 | { | ||
1976 | if (IsGroupMember(part.GroupID, agentID, 0)) | ||
1977 | return true; | ||
1978 | } | ||
1979 | |||
1980 | return false; | ||
1981 | } | ||
1897 | } | 1982 | } |
1898 | } | 1983 | } \ No newline at end of file |